01 - Preheat oven to 350°F. Grease a 9 x 13-inch baking dish.
02 - Bring a large pot of salted water to a boil. Cook elbow macaroni until just al dente, about 1 to 2 minutes less than package instructions. Drain and set aside.
03 - In a large saucepan over medium heat, melt 4 tablespoons unsalted butter. Whisk in 1/3 cup all-purpose flour and cook, stirring constantly, for 1 to 2 minutes until lightly golden.
04 - Gradually whisk in 3 cups whole milk and 1 cup heavy cream. Continue to cook, whisking constantly, until the mixture thickens and bubbles, approximately 5 to 7 minutes.
05 - Remove the sauce from heat. Stir in 2 cups sharp cheddar cheese, 1 cup Gruyère cheese, 1 teaspoon Dijon mustard, 1/2 teaspoon garlic powder, 1/2 teaspoon onion powder, 1/2 teaspoon salt, and 1/4 teaspoon black pepper until cheese is fully melted and sauce is smooth.
06 - Add cooked macaroni to the cheese sauce and stir to coat evenly. Transfer mixture into the prepared baking dish.
07 - In a bowl, mix 1 cup fresh breadcrumbs or panko with 2 tablespoons melted unsalted butter, 1/4 cup grated Parmesan cheese, and 1/2 teaspoon paprika if using. Sprinkle evenly over the macaroni mixture.
08 - Bake uncovered for 25 to 30 minutes, or until the topping is golden brown and the sauce is bubbling.
09 - Allow to cool for 5 to 10 minutes before serving to set the sauce.