None of that boxed crap!
Afraid these quantities are all rather wishy-washy, as I wing it every time -- it's a staple dish, you'll have plenty of opportunity to play around with proportions, and eyeball calibrations.
1. Select a good pasta. Rotini, radiatore and cavatapi are recommended, also in tri-color or herb varieties. Shells look nice, and elbow is classic, but I find they stick together annoyingly, needing infrequent stirring. YMMV.
Extra protein: use chickpea pasta. Spotted this recently, it's great. It may cook faster than regular (semolina) pasta, can add it to the pot a few minutes later. Also, gluten free. Or rice or other alternative kinds.
2. Boil pasta. You all know how to do that, right?
Boil water (at least enough to cover the pasta you'll be using), add salt (about a tsp. / qt I think? -- "tastes like the sea" is the general advice), add pasta, wait until al dente (not crunchy, just sticks to your teeth). Typically 5-10 min.
3. Drain pasta.
4. Add milk until covered.
5. Stir in a few tbsp of corn starch. Typical ratio is I think, 1 tbsp per cup of milk added? In a personal-pan sized run, I'm probably using about 1qt milk and 3 tbsp starch or so.
6. Return to medium heat. Stir occasionally: don't let the starch gum up the bottom of the pan. Starch gels, surprisingly suddenly, just before boiling; before then it's pretty much a granular solid, though it may clump up when dry. (How does this work at all? The milk is cold, from the 'fridge. The starch disperses easily in it. The unwashed pasta doesn't have enough heat to affect this -- but do avoid dumping starch on still-hot pasta, swirl around the milk a bit first. Science!)
7. As it starts to boil/simmer, add spices, and your favorite cheeses. The cheese will melt, and start to turn into nasty stringy blobs, except the starch and milk get in the way, and keep them dispersed -- end result, a smooth cream sauce. (As Alton Brown told it, the starch acts as a chaperone, getting between the cheese proteins, preventing them from clumping.)
(I've tried using water in a pinch -- the result was... unattractive at best. You really need both milk and starch to do the job. Plant "milks" are probably fine; I would imagine almond and oat being the best -- a more neutral flavor versus say, coconut milk. Although, hmm...)
Serve with your favorite hot sauce, e.g. sriracha.
You could make a traditional roux sauce with flour, but it's always been my experience -- besides the effort of getting out and cleaning another pan -- it's more work, and never as good, always a bit grainy. Pure starch gelatinizes fully, leaving a smooth sauce. No shame in that.
Spices: I typically reach for a little salt (adjust depending on saltiness of your cheese), a few grinds of black pepper, pinch or two garlic powder, several pinches onion powder, and some thyme or oregano. Paprika, cayenne, etc. also good choices. A few grinds of fresh nutmeg also adds interest (has to be fresh grated -- the essential oils evaporate particularly quickly, ground is useless!). Fresh snipped chive also nice.
Boiled veggies can be added along side the pasta -- broccoli or cauliflower is a favorite. Can also boost with sauteed veggies, for instance onion and jalapeno, garlic, etc. (in which case, you may opt out of the powdered spice versions). Fried bacon crumbles, etc. also great. This will make it no longer a one-pot build, of course.
Cheese: choose soft melting cheeses for extra creaminess, firm or hard cheeses for a stronger flavor. Hard cheeses should not be used by themselves, as they melt slowly, or incompletely. To avoid some effort, soft cheeses can usually be added by slices; others should be grated. Don't use cheese substitutes (Vee-who-shall-not-be-named is a cardinal sin here in Wisconsin!) or powdered or canned(!?) products -- pre-grated is okay, fresh is best.
Specific examples: Colby, jack (especially pepper jack), Gouda (especially smoked), Havarti, Brick, Cheddar, Fontina, bleu (including regional delicacies like Stilton, if you're into something smellier), Edam, Gruyere, Asiago, Pecorino Romano, Parmesan, etc. (The one processed cheese I'll allow is the bacon or salami filled kind, it's just too addictive...)
Mozzarella is less preferred, it's more of a cooking than melting cheese -- but acceptable in a pinch, or blended with others. Swiss's particular flavor, probably isn't great as the star, but is complementary in a blend. Avoid feta and other dry crumbly non-melting cheeses (hm, unless you want the texture? meh, something to try I guess!).
Family secret: make the mac and cheese however you like (roux or whatever), then dump it all into a baking dish and cover with more grated cheese (mozz is great here!). Top with bread crumbs (Panko) or crushed corn chips for extra crunch. Bake at 350°F until golden brown and delicious, typically 20 min. Enjoy your grease-soaked artery-clogging abomination.
Extra Wisconsin kick: substitute about half the milk with a nice malty ale. Fat Squirrel by New Glarus Brewery comes to mind.
Alternately, serve with your favorite fermented grain solution.
Tim