Heat oven to 400°F. Lightly butter a 9x13-inch baking dish.
Blanch Brussels sprouts in salted boiling water until bright and just tender, 4–5 minutes. Drain well and pat dry.
Cook bacon in a large skillet over medium heat until crisp. Transfer to a plate; keep about 1 tablespoon drippings in the pan.
Melt butter in the skillet with drippings. Sauté shallot until soft, 2–3 minutes. Stir in garlic for 30 seconds.
Whisk in flour and cook the roux 1 minute. Slowly add milk, then cream, whisking until smooth and slightly thickened, 3–4 minutes.
Season with Dijon, thyme, nutmeg, salt, and pepper. Off heat, fold in half the Gruyère and half the Parmesan until melted.
Combine sauce with Brussels sprouts and half the bacon. Spread in the baking dish. Top with remaining cheeses.
Toss panko with olive oil and a pinch of salt. Sprinkle over the top with remaining bacon.
Bake until bubbling and golden, 18–22 minutes. Broil 1–2 minutes for extra color. Rest 10 minutes before serving.