Cook bacon until crisp in a large pot over medium heat. Set aside.
Add butter and diced onion, cooking for 5-7 minutes or until soft and translucent. Add garlic and cook until fragrant, about 30 seconds. Sprinkle flour and whisk until smooth, about 1 minute.
Add diced potatoes, milk, chicken or vegetable stock, heavy cream, salt, freshly ground black pepper and chili powder. Stir to combine.
Bring to a boil and cook until potatoes are tender and can be pierced with a fork, about 10-15 minutes. Dice cooked bacon into bite-size pieces.
Turn off the heat and take ⅔ of the soup to a blender and puree until smooth. Return the pureed soup to the pot and add cooked bacon (reserve some bacon for serving).
Turn on the heat and bring to a simmer. Let it cook for 15 minutes more.
When serving, top with shredded cheddar cheese, chopped chives, sour cream, bacon and a pinch of hot smoked paprika.