Seperate the broccoli stem from the florets. Roughly chop the stems and reserve around 1 cup, then chop the broccoli florets and set aside (will be roughly 2 cups).
In a large dutch oven or heavy pot, heat butter and olive oil over medium-high heat until butter has melted.
Add in onions, 1 cup of chopped broccoli stems and garlic. Sautee over medium-high heat until softened, around 5 minutes.
Add in 1/4th cup of flour and continue cooking for another minute.
Stream in milk, whisking continuously, until well incorporated (no lumps). Continue whisking as you stream in chicken or vegetable broth until well combined.
Add in salt, pepper, dijon mustard and a pinch of nutmeg. Continue cooking over medium-high heat, whisking frequently, until soup comes to a simmer and begins to thicken.
Turn heat down to low and add in 2 cups of broccoli florets and diced carrots. Cook for 8-10 minutes until broccoli is tender but not overcooked.
Turn heat off and add in cheddar and parmesan cheese. Stir until the cheese has completely melted then remove the pot from heat.
Add in 1/4th cup of heavy cream and taste the soup for seasoning. Add any additional salt and pepper to taste and serve hot with more shredded cheese on top and crusty bread. Enjoy!