Pre-heat your oven to 400 degrees.
Arrange the florets from 1½ heads of cauliflower on a large baking sheet. Drizzle with olive oil, sprinkle generously with salt and coarse black pepper, and toss to coat. Roast for 20 minutes until lightly brown and just tender.
Meanwhile, melt a tablespoon of butter in a medium saucepan over medium heat. When melted and foamy add the shallot and garlic and sauté for about 3 minutes until the shallots become translucent and the garlic is fragrant. Add the thyme and sage and cook for another minute. Add the florets from the remaining ½ head of cauliflower and milk. Simmer gently for 20-25 minutes until the cauliflower is very tender.
While your two cauliflower situations are cooking, toast the breadcrumbs. In a small saucepan, melt the remaining tablespoon of butter over medium heat. Add the breadcrumbs and stir to coat with the butter. Cook for 2-3 minutes until the breadcrumbs darken slightly and literally smell like toast.Transfer to a bowl to cool and then stir in the paprika, ¼ cup Parmesan, and a pinch of salt. Set aside until ready to use.
Now you’re going to make the cheese sauce! Use a fork to fish the sage leaves and time from the milk. (You can throw those out.) Transfer the cauliflower and cooking liquid to a blender or food processor and puree until smooth.
Return the cauliflower puree to the saucepan over low heat and slowly stir in the remaining Parmesan, Gruyère, and goat cheese until well combined. Season with salt and coarse black pepper to taste.
Pour 1/3 of the cheese sauce into the bottom of a gratin dish (or whatever medium baking dish you happen to have). Add the roasted cauliflower in an even layer and top with the remaining cheese sauce. Sprinkle the toasted breadcrumb mixture over the cheese.
Bake for 25-30 minutes until the cheese sauce is bubbling around the sides. Let cool for 5-10 minutes and serve.