Heat oil and butter in a large saucepan over a medium low heat. Add onions, cover and cook for 20 minutes, stirring occasionally. Remove lid and cook for 30-40 minutes, stirring occasionally, until onions are soft and caramelised.
Add stock, the bay leaf, thyme and rosemary and season with salt and pepper. Bring to the boil, reduce heat to a simmer, simmer soup uncovered for 10-20 minutes or until slightly thickened.
Ladle soup into 1/2 cup capacity oven-proof bowls set on an oven tray. Sprinkle a little gruyere and parmesan onto the top of each bowl of soup. Top each with two slices of toasted ficelle then sprinkle with remaining cheeses. Place under a hot grill for 3-5 minutes of until cheese is melted and light golden.