In a large pot or Dutch oven over medium heat, cook the chopped bacon until crispy. Remove bacon and set aside; reserve 1–2 tablespoons of bacon fat in the pot.
Add butter to the pot (if needed), then saute the diced onion until soft and translucent, about 6–8 minutes.
Stir in the minced garlic and cook for 30 seconds until fragrant.
Sprinkle flour over the onions and stir well, cooking for 1 minute to remove the raw flour taste.
Gradually whisk in the chicken broth, stirring until smooth.
Add the cubed potatoes and bring to a gentle simmer. Cook uncovered for 12–18 minutes, or until potatoes are fork-tender.
Using a potato masher, mash about half of the potatoes directly in the pot to thicken the soup while keeping some chunks.
Reduce heat to low and slowly stir in the milk and heavy cream.
Add 1½ cups of shredded cheddar cheese and stir until fully melted and creamy.
Season with salt, pepper, and optional smoked paprika or cayenne.
Serve hot, topped with crispy bacon, sour cream, chives, and extra cheddar cheese.