Slice all onions uniformly into thin half-moons, roughly 1/4-inch thick. Uniform sizing ensures even caramelization—this precision matters tremendously for texture consistency throughout the pot.
Heat butter and olive oil in a large Dutch oven over medium heat until foaming subsides. Add sliced onions, salt, and pepper, stirring to coat completely with the fat mixture.
Reduce heat to low and cook for 50 minutes, stirring every 5-7 minutes without rushing. The onions will gradually transform from raw and pungent to deep amber gold; this slow process is where your creamy caramelized french onion soup recipe develops its signature complexity.
Once onions reach mahogany color, increase heat to medium-high and add balsamic vinegar, scraping up any browned bits from the pot bottom. Deglaze for 2 minutes, allowing the vinegar to meld with the caramelized sugars into glossy richness.
Pour in beef broth, fresh thyme, and bay leaf, bringing the mixture to a gentle boil. Simmer for 8 minutes to marry flavors before the cream addition.
Whisk cornstarch with 2 tablespoons cold water until smooth, then stir into the soup to prevent curdling when cream is added. This protects the silky texture and prevents separation.
Reduce heat to low and slowly stream in heavy cream while whisking constantly. Continue stirring for 3 minutes—it prevents the soup from breaking and ensures uniform consistency throughout.
Toast bread slices until golden, rub with minced garlic, top each with Gruyere, and float atop individual bowls before serving immediately.