Preheat oven to 400 degrees F. Grease a 3-quart baking dish with nonstick cooking spray.
Place Brussels sprouts on a baking sheet. Drizzle with olive oil. Add garlic and shallots and season with salt and pepper, tossing to mix.
Bake for 12-15 minutes, or until golden brown.
In a medium saucepan, melt butter over medium heat.
Stir in flour and cook for 1 minute.
Add milk and heat until mixture is thick and bubbling, about 4 minutes, stirring constantly.
Remove from heat and stir in cheese. Add 2 tablespoons of Parmesan and stir to combine. Mix in salt and pepper to taste. Stir in Brussels sprouts mixture.
Pour the mixture into the prepared baking dish. Sprinkle with remaining Parmesan cheese and bacon.
Bake for about 20 minutes, or until golden brown.