Peel and dice the potatoes into ½-inch cubes, cut the broccoli into small bite-sized florets, dice the onion, mince the garlic, and shred the carrot. Grate the cheddar from a block and cube the cream cheese, then let both sit at room temperature while you prep.
Melt the butter in a large Dutch oven over medium heat, then add the diced onion and cook for 5 to 6 minutes until softened and translucent. Add the minced garlic and stir constantly for 60 seconds until fragrant.
Sprinkle the flour over the onion and garlic mixture and stir constantly for 1 to 2 minutes until the flour is cooked out and the mixture is lightly golden. This roux will thicken the soup.
Slowly pour in the chicken broth about ½ cup at a time, stirring after each addition to prevent lumps. Add the whole milk, stir to combine, then raise heat to medium-high and bring to a gentle simmer.
Add the diced potatoes, shredded carrot, smoked paprika, dry mustard powder, and cayenne pepper to the pot. Cook uncovered over medium heat for 12 to 15 minutes, stirring occasionally, until the potatoes are fork-tender.
Stir in the broccoli florets and continue cooking for 5 to 7 minutes until the broccoli is just tender and still bright green. Do not overcook.
Remove from heat and use an immersion blender to blend about one-third of the soup directly in the pot in short pulses, leaving plenty of visible potato and broccoli chunks. Alternatively, ladle 2 cups of soup into a countertop blender, blend smooth, and stir it back in.
Return the pot to low heat and stir in the cubed cream cheese until fully melted. Add the grated cheddar in 2 to 3 batches, stirring after each addition until completely smooth. Season with salt and black pepper to taste.
Ladle the soup into bowls and top with extra shredded cheddar, sour cream, bacon bits, and fresh chives. Serve immediately with crusty bread or dinner rolls.