Preheat your oven to 375°F (190°C). If you’re short on time, you can skip roasting the broccoli and add it straight to the bake, but a quick roast adds depth and a touch of caramelized flavor.
Cook the pasta in generously salted water until it is just shy of al dente. It will finish cooking in the bake, so aim for a firm bite. Drain and set aside.
While the pasta cooks, blanch or steam the broccoli florets for 2–3 minutes until bright green but still crisp. Drain well. If you like roasted broccoli, toss with a little olive oil and roast for 10 minutes while you prep everything else.
In a saucepan, melt butter over medium heat. Stir in flour and cook for 1 minute to make a light roux. Gradually whisk in milk (and cream, if using), bringing to a gentle simmer. Let it thicken for 2–3 minutes, stirring frequently.
Add garlic powder, onion powder, salt, and pepper to taste. Stir in Parmesan and the optional cream cheese until smooth and creamy. If the sauce seems a bit thick, thin with a splash of milk.
Fold the cooked pasta, broccoli, and chicken into the sauce. Mix until everything is evenly coated.
Transfer the mixture to a baking dish. Sprinkle with shredded cheese on top for a bubbling, golden finish.
Bake for 18–22 minutes, until the top is melted and lightly golden. If you want a extra-crisp top, broil for 1–2 minutes at the end, watching carefully so it doesn’t burn.
Let it rest for 5 minutes before serving. This helps it set a bit and makes scooping easier.