Preheat and prep: Heat your oven to 375°F (190°C).
Grease a 9x13-inch baking dish or similar casserole pan.
Cook the pasta: Bring a large pot of salted water to a boil. Add the pasta and cook until just shy of al dente (about 1–2 minutes less than package instructions). You want it a bit firm so it doesn’t turn soft in the oven.
Reserve 1/2 cup pasta water, then drain.
Blanch the broccoli: In the last 2 minutes of the pasta cooking time, add the broccoli to the pot. Drain with the pasta. This gives bright, crisp-tender florets.
Sauté aromatics: In a large skillet or pot, heat butter and olive oil over medium.
Add onion and a pinch of salt. Cook 4–5 minutes until soft and translucent. Stir in garlic for 30 seconds until fragrant.
Make the roux: Sprinkle in the flour and stir constantly for 1 minute.
It should look like a paste. This step removes the raw flour taste.
Add liquids: Slowly whisk in the milk and broth. Keep whisking until smooth.
Simmer 3–5 minutes, stirring often, until it thickens to a light cream consistency.
Season and cheese it up: Turn heat to low. Stir in Dijon, smoked paprika, nutmeg, 1 teaspoon salt, and 1/2 teaspoon pepper. Add cheddar and 1/4 cup Parmesan in handfuls, stirring until melted and silky.
If the sauce feels too thick, loosen with a splash of pasta water or extra milk.
Combine: Add the drained pasta and broccoli to the sauce. Toss to coat. Taste and adjust seasoning.
It should be slightly saltier than you think—pasta absorbs salt as it bakes.
Assemble: Pour into the baking dish. Mix panko with remaining Parmesan and 1 tablespoon olive oil or melted butter. Sprinkle evenly over the top.
Bake: Bake 18–22 minutes, until bubbly at the edges and lightly golden on top.
For extra color, broil for 1–2 minutes, watching closely.
Rest and serve: Let it rest 5–10 minutes. This helps the sauce set so slices hold together. Serve warm.