Fill a large pot with 4–5 quarts (3.8–4.7L) of water and bring to a rolling boil over high heat. Add at least 1 tablespoon of salt — the water should taste pleasantly salty.
Add the elbow macaroni and cook 1–2 minutes less than package directions so it's just barely al dente. Before draining, reserve ½ cup (120ml) of starchy pasta water, then drain and set aside without rinsing.
Melt the butter in a heavy-bottomed saucepan over medium heat, then add the flour all at once and whisk constantly for 1½–2 minutes until the mixture turns slightly golden and smells nutty.
Reduce heat to medium-low and slowly pour in the warmed milk about ¼ cup at a time, whisking constantly after each addition, then pour in the warmed heavy cream in a steady stream. Increase to medium heat and whisk for 3–5 minutes until the sauce thickens enough to coat the back of a spoon.
Remove the pan from heat and stir in the Dijon mustard, smoked paprika, garlic powder, onion powder, white pepper, and salt to taste.
With the sauce off the heat, add the shredded cheddar and Gruyère in two to three batches, stirring gently after each addition until fully melted and the sauce is glossy and smooth.
Add the drained pasta to the cheese sauce and fold together until every noodle is evenly coated, adding reserved pasta water a tablespoon at a time if the sauce is too thick. Serve immediately, garnished with a dusting of smoked paprika or cracked black pepper.