01 - Preheat the oven to 400°F. Lightly grease a 9x13-inch baking dish with butter or cooking spray.
02 - Bring a large pot of salted water to a rolling boil. Add the trimmed and halved Brussels sprouts, cooking for 4 to 5 minutes until just fork-tender. Drain thoroughly and set aside.
03 - In a large skillet, melt 2 tbsp butter over medium heat. Add the finely chopped onion and sauté for 3 minutes until softened and translucent. Stir in the minced garlic and cook for 1 additional minute until fragrant.
04 - Sprinkle 2 tbsp all-purpose flour over the softened onion and garlic. Stir continuously for 1 minute to cook out the raw flour taste and form a smooth roux.
05 - Gradually whisk in 1 1/4 cups whole milk and 1/2 cup heavy cream, pouring slowly to prevent lumps. Continue cooking and stirring over medium heat for 3 to 5 minutes until the sauce thickens enough to coat the back of a spoon.
06 - Reduce heat to low. Stir in 1 cup grated Parmesan, 1 cup shredded mozzarella, 1/2 tsp salt, 1/4 tsp black pepper, and 1/4 tsp ground nutmeg. Mix until the cheeses are fully melted and the sauce is smooth and creamy.
07 - Add the blanched Brussels sprouts to the cheese sauce, gently tossing to coat each piece evenly. Transfer the mixture to the prepared baking dish, spreading it into an even layer.
08 - In a small bowl, combine 1/4 cup grated Parmesan, 1/4 cup panko breadcrumbs, and 1 tbsp melted butter. Mix until the breadcrumbs are evenly moistened, then sprinkle the topping uniformly over the casserole.
09 - Bake on the center rack for 20 to 25 minutes until the topping is golden brown and the sauce is bubbling around the edges. Let rest for 5 minutes before serving to allow the sauce to set slightly.