Heat olive oil in a large Dutch oven over medium-high heat. Season short ribs with salt and pepper.
Sear ribs on all sides until browned, about 3–4 minutes per side. Remove and set aside.
In the same pot, add butter and sliced onions. Cook over medium heat until deeply caramelized, about 30 minutes. Stir in brown sugar after 10 minutes.
Add garlic and cook for 1–2 more minutes.
Deglaze the pot with white wine (if using), scraping up browned bits from the bottom.
Return the ribs to the pot. Add beef broth, Worcestershire sauce, thyme, and bay leaf. Bring to a boil.
Reduce heat to low, cover, and simmer for 2.5 to 3 hours until the meat is fall-off-the-bone tender.
Remove ribs, discard bones and shred the meat. Return shredded beef to the pot and stir.
Preheat broiler. Ladle soup into oven-safe bowls, top each with toasted bread and shredded Gruyère cheese.
Place bowls under the broiler for 2–3 minutes until cheese is melted and bubbly. Serve hot.