01 - Preheat oven to 400°F. Lightly grease a 9x13-inch baking dish with butter or nonstick spray.
02 - Bring a large pot of salted water to a rolling boil. Add trimmed and halved Brussels sprouts, cooking for 4–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 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 the flour over the sautéed onion and garlic, stirring constantly for 1 minute to cook out the raw flour taste.
05 - Gradually whisk in the whole milk and heavy cream, pouring slowly to prevent lumps. Continue cooking and stirring over medium heat for 3–5 minutes until the sauce thickens enough to coat the back of a spoon.
06 - Reduce heat to low. Add grated Parmesan, shredded mozzarella, salt, black pepper, and nutmeg. Stir continuously until the cheeses melt completely 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 entire mixture into the prepared 9x13-inch baking dish, spreading into an even layer.
08 - In a small bowl, combine the remaining 1/4 cup grated Parmesan, panko breadcrumbs (if using), and 1 tbsp melted butter. Mix until the crumbs are evenly moistened, then sprinkle uniformly over the casserole surface.
09 - Bake on the center rack for 20–25 minutes until the topping is deep golden brown and the sauce is bubbling around the edges.
10 - Remove from the oven and let the casserole rest for 5 minutes to allow the sauce to set slightly before serving.