Lay bay leaf over cut side of onion and poke cloves through bay leaf and into onion to secure leaf in place. Put onion into a 2-quart saucepan and add milk. Set saucepan over medium heat and bring to a gentle simmer. Cook without boiling for 10 minutes. Remove from heat and strain through a fine mesh sieve. Set aside until ready to use.
Preheat oven to 400 degrees.
Steam cauliflower in a steam basket inserted into a medium saucepan until just tender, about 10 minutes. Arrange cauliflower in a shallow 2-quart casserole (approximately 7 1/2 by 11 inches) and set aside.
In a 2-quart saucepan, melt 3 tablespoons butter with olive oil. Add shallots and garlic and saute until fragrant, about 1 minute. Add flour and stir, using a wooden spoon, to form a blond roux. (Do not allow the mixture to brown.) Add simmered, strained milk to pan and whisk until smooth. Increase heat and bring to a boil. Reduce heat to a simmer and cook for 10 minutes, or until thickened, smooth, and creamy. Remove pan from heat and add nutmeg and Gruyere, stirring until melted. Strain sauce and pour evenly over cauliflower.
Melt remaining 2 tablespoons butter in an 8-inch saute pan and add breadcrumbs. Toss well to coat. Sprinkle with salt and pepper and chopped parsley. Sprinkle breadcrumbs evenly over top of cauliflower and bake until top is golden brown and sauce is bubbly, about 25 minutes.