Add olive oil and butter to a large dutch oven. Set over medium heat. Once butter has melted, add onions, salt and pepper and cook, stirring almost constantly, for about 30 minutes, or until the onions are softened and lightly golden. Increase the heat to medium-high and continue to cook the onions until they are deeply caramelized, about 25-35 more minutes. If needed, you can add a little bit of water to the pan as the onions cook if they are sticking to the pan.
Add flour and thyme and stir until the flour is no longer visible. Add beef broth and red wine vinegar and bring to a boil. Reduce heat to a simmer and cook uncovered until thickened, about 20 minutes.
When ready to serve, preheat the broiler. Divide the soup into broiler-safe serving bowls (about 2 cups of soup per person), then top each with a slice of bread. Divide the cheese evenly on top of each bowl of soup, then broil for 1 to 2 minutes, or until the cheese is bubbly and brown. Keep a close eye on this process as every broiler is different!