In a large Dutch oven or saucepan, bring about 4 quarts of salted water to a rolling boil. Cook the macaroni until al dente. Drain through a colander, rinsing briefly to keep the pasta from sticking.
Rinse the saucepan with cool water and dry off, then place back on the burner over low heat and add the butter (if the pan is still hot, remove from the heat while the butter melts to keep it from browning).
Once the butter has melted, add the flour and begin whisking to form a paste. Continue whisking constantly over low heat until the paste (technically known as a roux), turns slightly yellow and begins to smell fragrant, 1-2 minutes. Slowly whisk in the milk, then turn the heat up to high. Whisk in the mustard, cayenne pepper, and garlic, if using.
Cook, whisking constantly, until the sauce bubbles and thickens, 7-10 minutes. You’re looking for the consistency of cream soup.
Once thick, remove from the heat and slowly whisk in the cheeses, one handful at a time. Make sure to do this off the heat. Once the sauce is smooth, stir in the macaroni.
Divide into individual portions and serve.
Leftovers can be kept in an airtight container in the refrigerator for up to 5 days.
I grate the garlic using a microplane zester. This helps release the liquid and creates a paste that blends right into the sauce. If you don’t have a microplane zester, you can finely mince the garlic.
Don’t use packaged American cheese. It’s not the same thing as what you’ll get at the deli counter, which can be purchased in blocks.
If you have a food processor, you can save a ton of time by using the shredding disc attachment to grate the cheese.