Preheat and prep: Heat the oven to 375°F (190°C). Grease a 9x13-inch baking dish.
Cook the pasta: Boil in salted water until just shy of al dente.
Drain and set aside. It will finish cooking in the oven.
Sauté aromatics: In a large pot, melt 1 tablespoon butter over medium heat. Add onion and cook until soft, about 4–5 minutes.
Stir in garlic for 30 seconds.
Make the roux: Add remaining 3 tablespoons butter to the pot. Once melted, sprinkle in flour. Whisk and cook 1–2 minutes until it smells slightly nutty.
Build the sauce: Slowly whisk in milk and then the chicken broth.
Keep whisking to avoid lumps. Simmer 3–4 minutes until slightly thickened.
Season: Stir in mustard, paprika, 1 teaspoon salt, and 1/2 teaspoon pepper. Taste and adjust.
Add cream if using for extra richness.
Add cheeses: Reduce heat to low. Stir in cheddar, Monterey Jack, and half the Parmesan until melted and smooth.
Combine: Add cooked pasta and chicken to the sauce. Fold gently until everything is coated and evenly distributed.
Transfer: Pour the mixture into the prepared baking dish.
Smooth the top.
Make the topping: In a bowl, mix bread crumbs, remaining Parmesan, olive oil, a pinch of salt, and a little black pepper. Melt the extra tablespoon of butter and stir it in. Sprinkle evenly over the casserole.
Bake: Bake 20–25 minutes, until bubbling at the edges and the top is golden brown.
For extra color, broil 1–2 minutes at the end. Watch closely.
Rest and serve: Let it sit 5–10 minutes so the sauce sets slightly. Garnish with chopped parsley if you like.
Serve warm.