Pat short ribs dry with paper towels and season generously with salt and black pepper on all sides. Let sit at room temperature for 15-20 minutes.
Heat olive oil in Dutch oven over medium-high heat until shimmering. Sear short ribs in batches for 3-4 minutes per side until deep golden brown, then transfer to a plate.
Reduce heat to medium, add butter to pot, then add sliced onions. Cook for 35-45 minutes, stirring every 5-7 minutes, until deep golden brown and sweet.
Add minced garlic and cook 1 minute, then stir in tomato paste and cook 2-3 minutes. Pour in wine, scrape bottom of pot, and simmer 3-4 minutes until reduced by half.
Add beef stock, water, thyme sprigs, bay leaves, Worcestershire sauce, rosemary, salt, and pepper. Bring to a gentle boil over medium-high heat.
Return seared short ribs to pot with any juices, cover with lid, and transfer to 325°F (163°C) oven. Braise for 2.5-3 hours until meat is fall-apart tender.
Remove pot from oven, transfer ribs to cutting board, and let cool 5-10 minutes. Shred meat off bones, discarding bones and large fat pieces, then return meat to soup and remove thyme sprigs and bay leaves.
Preheat broiler to high. Toast baguette slices on baking sheet 1-2 minutes per side until lightly golden, then top each with mixed Gruyère and Parmesan cheeses.
Ladle hot soup into bowls, top with cheese-covered bread slices, and broil 2-3 minutes until cheese is melted, bubbly, and golden brown. Garnish with fresh thyme and serve immediately.