In a Dutch oven, heat butter and 1 tablespoon olive oil over medium heat. Add onions; cook, stirring occasionally, until softened and liquid has begun to evaporate, 20 to 25 minutes. Stir in salt, pepper, and sugar; reduce heat to medium-low. Cook, stirring occasionally, until onion is deep golden brown, 45 to 55 minutes. (If onion begins to stick, stir in 1 tablespoon water.)
Stir garlic into onions; cook 1 minute more. Stir in flour until blended; cook, stirring constantly, until lightly browned, about 2 minutes (do not let burn). Gradually stir in wine, stock, bay leaf, and thyme; bring to a boil. Reduce heat; simmer, uncovered, until flavors are blended, about 30 minutes. Remove soup from heat; stir in cognac, if desired. Return pot to heat; keep warm over low heat.
Preheat oven to 350°. Line a baking sheet with foil.
Brush both sides baguette slices with remaining 1 tablespoon oil; place on prepared pan.
Bake until bottoms are golden brown, 12 to 15 minutes. Turn over bread; bake until crisp and bottoms are golden brown, about 10 minutes more. Remove from oven.
Increase oven setting to broil. Top crostini with Gruyère, packing slightly; sprinkle with Parmesan. Broil 4 inches from heat until cheese is melted and bubbly, 1½ to 2 minutes.
To serve, remove bay leaf from soup, and ladle soup into serving bowls. Place two crostini in each bowl. Serve immediately.
Notes
*We used Knorr Homestyle Beef Stock, a concentrated stock sold in the soup aisle, adding 2 tubs and 8 cups water directly to the Dutch oven.
Recipe by Victoria at https://victoriamag.com/french-onion-soup-recipe/