Topping: Combine bread crumbs and Parmesan cheese in a small bowl and set aside.
Bechamel Sauce: Melt 4 tablespoons of the butter over low heat in a medium saucepan. Add the flour and stir to combine. Stir constantly, for about 3 minutes. Increase heat to medium and whisk in the milk or half-and-half, adding a little at a time and cook until thickened, about 4 to 5 minutes. Lower heat, season with the salt and pepper and add Gruyere and mozzarella cheeses. Stir until cheese is melted and sauce is smooth. Set aside.
French Onion "Soup:" Heat 2 tablespoons of the butter and olive oil over medium-high heat in a large saucepan. Add onions, cover, and cook 10 to 15 minutes, stirring frequently. Remove cover, add garlic and honey, and continue to cook uncovered, stirring frequently, until onions are caramelized, about 10 to 15 minutes. Season with salt and a generous amount of pepper. Remove pot from heat and add sherry. Return to heat and stir to remove browned bits from bottom of pan. Reduce sherry by half, then add stock and thyme and cook until almost all liquid is evaporated. Remove from heat.
Grease a 3-quart baking dish or casserole with the last tablespoon of butter or spray with nonstick cooking spray. Combine cooked pasta with onion "soup" mixture and bechamel sauce, and stir well to combine. Transfer pasta to baking dish and sprinkle with bread crumb/Parmesan topping.
Bake until top is golden brown and cheese is bubbly, about 35 to 40 minutes. Remove from oven and let cool slightly before serving.