Prep the potatoes. Peel and dice the russets into roughly 1/2-inch cubes. Smaller cubes cook faster and mash more easily.
Rinse in cold water to remove excess starch and set aside.
Crisp the bacon. In a large heavy pot or Dutch oven, cook the chopped bacon over medium heat until crisp. Transfer the bacon to a paper towel–lined plate. Leave about 2 tablespoons of bacon fat in the pot.
Build your flavor base. Add the butter to the pot with the bacon fat.
Stir in the chopped onion and a pinch of salt. Cook until soft and translucent, about 5–6 minutes. Add the garlic and cook for 30 seconds, just until fragrant.
Make a light roux. Sprinkle the flour over the onions and garlic.
Cook, stirring, for 1–2 minutes to remove the raw flour taste. This helps thicken the soup later.
Add liquids and potatoes. Slowly whisk in the chicken broth, scraping up any browned bits. Stir in the milk.
Add the diced potatoes and a pinch of salt and pepper. Bring to a gentle simmer.
Simmer until tender. Cook uncovered for 15–20 minutes, stirring occasionally, until the potatoes are very tender when pierced. Keep the heat at a gentle bubble to prevent scorching.
Partially mash for texture. Use a potato masher or the back of a spoon to mash some of the potatoes in the pot.
Leave some chunks for a hearty bite. If you prefer it smoother, use an immersion blender briefly.
Stir in the dairy and cheese. Reduce heat to low. Stir in the sour cream and 1 cup of the shredded cheddar until melted and smooth.
Taste and adjust salt and pepper. Add a pinch of smoked paprika if you like a subtle smoky note.
Finish with bacon and toppings. Stir half the bacon into the pot. Ladle into bowls and top with the remaining bacon, extra cheddar, sliced green onions, and chives.
Serve hot. This soup thickens as it sits.
If it’s thicker than you want, splash in a little warm milk or broth to loosen it.