Heat a large sauce pan over medium heat. Chop the bacon into small pieces, about 1/4"-1/2", and add to the hot pan. Cook bacon until brown and crispy, then transfer the bacon to a plate lined with paper towel to drain. Leave the bacon fat in the pan.
Add butter and onions to the pan, along with a good pinch of salt. Stir. Cook the onions until tender and starting to brown, about ten minutes. Stir in garlic, and cook another minute until fragrant and softened.
Stir in the flour. Let it cook 1-2 minutes to cook out the "flour" taste.
Add potatoes, chicken broth, whole milk, smoked paprika, and another good pinch of salt. Stir. Bring the pot up to a boil, and let it sit undisturbed for 15 minutes.
Turn the heat down. Check to make sure you can easily pierce a potato with a fork, which indicates that they are cooked through. Once the soup has stopped bubbling, carefully use an immersion blender to blend the soup into a smooth, creamy texture. Stir in heavy cream, sour cream, and a healthy pinch of freshly cracked black pepper. Taste, then season with more salt and pepper to taste.
Let the soup simmer for about ten minutes before serving.
Serve the soup hot, with grated cheddar cheese, chopped green onion, the crispy chopped bacon, and additional sour cream for toppings.