Prep the oven and pan: Heat the oven to 375°F (190°C).
Grease a 9x13-inch baking dish or similar casserole pan.
Par-cook the cauliflower: Bring a large pot of salted water to a boil. Add cauliflower florets and cook for 3–4 minutes until just tender but still firm. Drain well and pat dry with a clean towel.
Excess water can thin your sauce.
Make the cheese sauce base: In a medium saucepan, melt butter over medium heat. Whisk in flour and cook 1 minute to remove the raw taste, stirring constantly.
Add liquids: Slowly whisk in milk and chicken broth. Keep whisking until smooth.
Simmer 3–5 minutes, stirring, until the sauce thickens slightly and coats the back of a spoon.
Season and add cheese: Stir in Dijon, garlic powder, onion powder, smoked paprika, a pinch of salt, and black pepper. Remove from heat and stir in 1 1/2 cups shredded cheese and all the Parmesan until melted and smooth. Taste and adjust seasoning.
Combine in the dish: Add the cauliflower and diced ham to the baking dish.
Pour the cheese sauce over and gently toss to coat everything evenly.
Top it off: Sprinkle the remaining 1/2 cup shredded cheese on top. If using, mix breadcrumbs with olive oil or melted butter and scatter evenly over the cheese.
Bake: Bake 20–25 minutes until bubbling around the edges and the top is golden. If the top isn’t browning, broil for 1–2 minutes, watching closely.
Rest and garnish: Let the casserole rest 5–10 minutes to set.
Sprinkle with chopped parsley or chives before serving.