Cook the bacon: Place the chopped bacon in your pot over medium heat and cook until crisp, about 7-8 minutes, stirring occasionally. Transfer the bacon to a paper-towel-lined plate, leaving the rendered fat in the pot.
Sauté the onion: Add the butter to the bacon fat and melt over medium heat. Cook the diced onion until soft and translucent, about 4-5 minutes. Stir in the garlic and cook for 30 seconds until fragrant.
Make the roux: Sprinkle the flour over the onion mixture and stir constantly for 1 minute until lightly golden and pasty.
Add the broth: Slowly pour in the chicken broth while stirring continuously. Keep stirring until smooth and bubbling gently at the edges.
Add the potatoes: Stir in the diced potatoes and bring to a gentle boil, then reduce heat to a low simmer. Cover and cook until potatoes are fork-tender, about 15-18 minutes.
Mash some of the potatoes: Use a potato masher to give the pot 5-6 gentle presses, leaving about half the potatoes broken down and half in chunks.
Add the dairy: Reduce heat to low and stir in the milk and heavy cream. Warm through gently for about 5 minutes; do not let it boil.
Melt in the cream cheese and cheddar: Add the cubed cream cheese and shredded cheddar by the handful, stirring after each addition until fully melted and smooth.
Finish it: Turn off the heat and stir in the sour cream. Season generously with salt, pepper, and a pinch of smoked paprika. Taste and adjust. Ladle into bowls and top with extra cheddar, bacon, green onions, and sour cream.