Preheat oven to 350°F (175°C) and position rack in the center. Bring a large pot of salted water to a boil, add elbow macaroni, and cook for 2 minutes less than package directions (about 5–6 minutes). Drain thoroughly without rinsing and set aside.
Melt 4 tbsp butter in a medium saucepan over medium heat. Add flour all at once and whisk constantly for 2–3 minutes until the mixture is golden, smooth, and smells nutty.
Gradually pour in the whole milk, about ½ cup at a time, whisking constantly to prevent lumps. Add the heavy cream, bring to a gentle simmer, and cook 5–7 minutes until the sauce coats the back of a spoon.
Stir in the Dijon mustard, garlic powder, onion powder, cayenne (if using), salt, and black pepper until evenly combined.
Reduce heat to low and remove pan from direct heat. Add sharp cheddar and Gruyere in batches, stirring after each addition until completely melted and the sauce is glossy and smooth.
Fold the drained pasta into the cheese sauce until every piece is fully coated. Pour into a greased 9x13-inch baking dish and spread evenly. Sprinkle the shredded mild cheddar over the top.
Combine panko, Parmesan, and paprika in a small bowl. Drizzle with 2 tbsp melted butter and stir until the breadcrumbs are evenly coated and slightly clumped. Spread evenly over the cheese layer.
Bake uncovered for 25–30 minutes until the sauce is bubbling at the edges and the topping is deep golden brown. For extra crunch, broil for the final 2–3 minutes, watching carefully.
Let the mac and cheese rest for 10 minutes before serving to allow the sauce to set slightly, making it easier to portion cleanly.