Cook the Pasta: Cook the elbow macaroni according to package directions in a large pot of salted water until al dente. Drain and set aside, but do not rinse.
Make the Roux: In the same pot you used for the pasta, melt the butter over medium heat. Whisk in the all-purpose flour and cook for about 1 minute, stirring constantly, until a smooth paste forms. This is your roux, which will thicken the sauce.
Create the Sauce Base: Gradually whisk in the warm milk, a little at a time, making sure to incorporate it fully before adding more. Continue whisking until the mixture is smooth and begins to thicken. Bring to a gentle simmer, stirring constantly for about 3-5 minutes, until the sauce coats the back of a spoon.
Add Seasoning & Cheese: Reduce the heat to low. Whisk in the salt, black pepper, cayenne pepper, and dry mustard. Add the grated sharp cheddar cheese and pepper jack cheese a handful at a time, whisking constantly until each batch is completely melted and the sauce is smooth. Do not boil the sauce after adding the cheese, as this can make it greasy or grainy.
Combine & Serve: Add the cooked macaroni to the pot with the cheese sauce. Stir until the pasta is fully coated. If you prefer a stovetop mac and cheese, it is now ready to serve.
For Baked Mac and Cheese: If you prefer a baked mac and cheese, transfer the mixture to a 9x13-inch baking dish. Sprinkle the grated Parmesan cheese evenly over the top. Bake in a preheated oven at 375°F (190°C) for 20-25 minutes, or until the top is golden brown and bubbly.