Prep the broccoli. Cut the broccoli into small, bite-size florets. Peel and slice the stems thinly if you like— they’re great in this too.
Boil the pasta. Bring a large pot of salted water to a boil. Cook the pasta until just shy of al dente, about 1–2 minutes less than package directions.
Blanch the broccoli. In the last 2 minutes of pasta cooking, add the broccoli florets to the pot.
When pasta is ready, drain both together. Set aside.
Start the roux. In a large pot or deep skillet, melt 4 tablespoons butter over medium heat. Whisk in flour and cook 1–2 minutes, whisking constantly, until foamy and lightly golden.
Don’t let it brown deeply.
Add the dairy. Slowly whisk in the milk (and cream if using), a little at a time, until smooth. Bring to a gentle simmer, stirring, until it thickens enough to coat the back of a spoon, about 4–6 minutes.
Season the sauce. Stir in Dijon, garlic powder, onion powder, smoked paprika, 1 teaspoon salt, and several grinds of black pepper. Taste and adjust—this is your flavor base.
Melt in the cheese off heat. Take the pot off the heat.
Add cheddar, Gruyère/Jack, and Parmesan (if using) by the handful, stirring until fully melted and silky. If it seems too thick, splash in a bit more milk.
Combine. Fold the drained pasta and broccoli into the sauce. Stir gently to coat.
It should be creamy but scoopable. Adjust salt and pepper.
Optional breadcrumb topping. For a crunchy finish, melt 1 tablespoon butter in a small pan. Stir in panko and cook until golden.
Sprinkle over the mac and cheese.
Optional bake. For bubbly edges, transfer to a buttered 9x13-inch dish, top with buttered panko, and bake at 375°F (190°C) for 12–15 minutes until lightly browned.
Serve hot. Let it rest 5 minutes so it sets slightly. Scoop and enjoy.