Heat butter and olive oil in a large soup pot or Dutch oven.
Add onions, garlic, carrots, and season with salt and pepper; cook over medium heat for 3 minutes or until onions are translucent.
Add in the bay leaf, diced potatoes, broccoli, and stock; cook over high heat and bring to a boil.
Reduce heat to low, cover pot, and simmer for 15 minutes.
Remove the lid, and check that the potatoes are tender. If not, cover with the lid and let them cook for a little bit longer. Once they are tender, take out the bay leaf and discard it.
Remove the pot from the heat; stir in the heavy cream and puree the soup with either an immersion blender, a regular blender, or a food processor. If using a food processor or regular blender, puree the soup in batches and do not pour the whole soup into the food processor all at once.
Taste the soup for salt and pepper and adjust.
Ladle the soup into bowls. Garnish with shredded parmesan cheese and serve.