In a large pot, bring 4 cups of water and 1 teaspoon of salt to a boil. Add the elbow macaroni and cook according to package instructions until al dente. Drain and set aside.
In the same pot, melt 2 tablespoons of butter over medium heat. Once melted, whisk in 2 tablespoons of flour and cook for about 1 minute until lightly golden.
Gradually whisk in 2 cups of whole milk, stirring constantly to avoid lumps. Continue cooking until the mixture thickens, about 3-5 minutes.
Reduce the heat to low and add the shredded cheddar and Monterey Jack cheeses. Stir until the cheese is completely melted and the sauce is smooth.
Add the garlic powder, onion powder, black pepper, paprika, and cayenne pepper (if using). Mix well.
Fold in the cooked macaroni until fully coated with the cheese sauce. Cook for an additional 2-3 minutes to heat through.
Serve immediately, or transfer to a baking dish and broil for 2-3 minutes for a crispy top.