Cook the bacon in a large saucepan or Dutch oven over medium heat. Cook until browned and crisp. Using a slotted spoon, transfer the bacon to a plate, reserving 1 tablespoon of the bacon fat in the pan.
Add the butter to the pan. When the butter is bubbly, add the onion and cook until tender and caramelized, about 3 to 5 minutes. Add the garlic and cook until fragrant, about 30 seconds.
Add the flour and stir to coat. Cook for 30 to 60 seconds, until smooth.
Add the potatoes, broth, milk, cream, 1/2 teaspoon salt, and 1/4 teaspoon black pepper, increase the heat to medium-high and bring to a boil.
Cook for 10 to 15 minutes, until the potatoes are fork tender.
Reduce the heat to low. Use an immersion blender to puree the soup until you reach the desired consistency. Alternatively, puree the soup in batches in a blender. When using a blender, let the soup cool slightly before pureeing, and then only fill the blender halfway. Pro tip: Cover the top of your blender with a dish towel in case there’s spillover.
When the soup is pureed to your liking, fold in the sour cream, cheddar cheese, and most of the bacon, reserving some of the bacon for garnish.
Ladle the soup into bowls and top with reserved bacon, cheddar cheese, and green onions.
Store leftover soup in an airtight container in the refrigerator for up to 3 days, or freeze for up to 3 months. Thaw overnight before reheating in a saucepan over medium heat.