Heat butter and oil in a large cast iron pot over medium heat. Add onions and stir every 4 minutes initially, and every 2 minutes towards the end until the onions have caramelized into a rich brown/golden color. Lower heat if onions are browning too quickly. The process will take 45 to 60 minutes.
Once onions are caramelized, add wine, broth, garlic, bay and thyme. Let zimmer for an hour.
At the end of zimmering, add vinegar, salt and pepper to taste. Remove thyme sprigs and bay leafs.
Ladle soup into casseroles, and cover top with bread slices. Sprinkle each casserole generously with Gruyère. Broil until cheese melts and browns.