Preheat the oven to 350°F. Lightly grease a 9x13 casserole dish with cooking spray.
Shred the cheese and combine all the cheese in a bowl. (For the best results, freshly shred a block of cheese.)
Bring a large pot of salted water to a boil over high heat. Once boiling, add the pasta and cook al dente according to the package instructions. (Cooking time will vary depending on the type of pasta you use.)
12 oz cavatappi pasta, or elbow pasta
As the pasta cooks, melt the butter in a large skillet or pot over medium-high heat. Once melted, whisk in the flour until combined.
4 Tbsp salted or unsalted butter, 1/3 cup all purpose flour
Continue whisking for about 2-3 minutes, until the flour mixture is slightly golden.
Slowly pour in the milk, whisking vigorously to smooth out any lumps. Add the seasonings, Dijon mustard, and hot sauce. Whisk until combined.
2 3/4 cup whole milk, 1 tsp salt, 1 tsp garlic powder, ½ tsp onion powder, ½ tsp ground black pepper, ½ tsp paprika, 1 Tbsp Dijon mustard, 1 Tbsp hot sauce
Bring the sauce to a simmer and cook for about 2-3 minutes, or until thickened.
Remove the sauce from the heat and add 1 ½ cups of the shredded cheese mixture. Stir until the cheese has melted and the sauce is smooth.
3 cups shredded cheese, gruyere, mozzarella, cheddar
Once the pasta is cooked, drain and add it to the roux cheese sauce and toss until evenly coated. Remove from the heat.