Mise en place - Peel and dice the onion. Peel and mince the garlic. Wash and trim the broccoli, and chop the broccoli and stems into bite-sized pieces, enough to make three cups. Set aside. Trim, peel, and slice the carrots into rounds. Set aside.
Sauté the aromatics - In a large heavy-bottomed soup pot or Dutch oven, add 4 T butter and the diced onion, Sauté over medium heat until the onion is translucent. Add the garlic and cook about 30 seconds, stirring constantly so it doesn’t burn.
Build the soup base - Sprinkle ¼ cup flour over the onions and garlic, and cook over medium heat for a couple of minutes, stirring constantly until the flour has absorbed the butter completely and the rawness of the flour has cooked off. Slowly add 2 cups chicken stock, whisking constantly. Then slowly pour in 2 cups milk, whisking constantly.
Simmer - Allow mixture to simmer over low heat, whisking occasionally, for about 10 minutes, or until it has reduced and thickened some. Add the chopped broccoli, sliced carrots, and the reserved onion and garlic. Stir in the salt, pepper, paprika, dry mustard powder, and cayenne. Continue simmering for about 20 minutes, or until the broccoli and carrots are softened.
Add the cheese - While soup simmers, grate the cheese. When the soup is ready, stir in the cheese and continue stirring until melted and incorporated fully, less than 1 minute.
Serve - Transfer soup to bowls, and serve immediately.