Bring a large pot of salted water to a boil. Add 9 oz (250 g) elbow macaroni and cook until al dente according to the package instructions. Drain and set aside.
In a large saucepan over medium heat, melt 2 tablespoons salted butter, then add 2 tablespoons all-purpose flour and whisk continuously for 2–3 minutes until smooth.
Slowly pour in 2 cups (500 ml) of whole milk while whisking constantly to prevent lumps. Continue stirring for 5–7 minutes, until the sauce thickens, then add 1 teaspoon salt, ½ teaspoon black pepper, ½ teaspoon garlic powder, ½ teaspoon onion powder, ¼ teaspoon nutmeg, and ½ teaspoon paprika. Stir well.
Reduce the heat and add 7 oz (200 g) shredded cheddar cheese and 7 oz (200 g) shredded mozzarella cheese. Stir until melted and smooth, reserving a small handful of the cheese for topping.
Add the cooked macaroni to the cheese sauce and stir until fully coated, then transfer everything to an oven-safe dish and sprinkle the reserved cheese on top.
Bake in a preheated oven at 380°F / 195°C (350°F convection / 175°C fan) for 25 minutes covered, then uncover and bake for 10 minutes more, until hot and lightly golden on top. Serve warm.
Notes
Cook the Pasta Al Dente: I like cooking the macaroni just until tender because it will soften a little more while baking.Whisk the Sauce Well: I keep whisking while adding the milk so the sauce stays smooth and thick without lumps.Use Freshly Shredded Cheese: I find freshly shredded cheddar and mozzarella melt more smoothly and help keep the sauce creamy.Bake Covered First: Covering the dish at the beginning keeps the mac and cheese creamy before finishing uncovered for a lightly golden top.