Place your chopped bacon in a cold Dutch oven, then turn the heat to medium. Let it render slowly until deeply golden and crisp, about 7-8 minutes. Remove it with a slotted spoon onto a paper-towel-lined plate, leaving the flavorful drippings behind in the pot.
Add the butter to the bacon drippings and let it melt over medium heat. Toss in the diced onion and cook for 3-4 minutes until soft and translucent. Stir in the minced garlic and cook for another 30 seconds until fragrant.
Sprinkle the flour over the butter and onion mixture, whisking constantly. Cook for about a minute until it turns lightly golden and smells nutty. This step is what gives the soup its thick, creamy body later on.
Slowly pour in the chicken broth while whisking to prevent lumps from forming. Once smooth, stir in the milk and bring the mixture to a gentle simmer. It should start thickening slightly within a couple of minutes.
Add the cubed potatoes to the pot and stir well to coat them in the creamy broth. Reduce the heat to medium-low and let everything simmer uncovered for 18-20 minutes. The potatoes are ready when a fork slides through them easily.
Use a potato masher or the back of a spoon to lightly crush about half of the potatoes right in the pot. This thickens the soup naturally and gives you that perfect mix of creamy broth with chunky potato bites. Leave the rest of the potatoes whole for texture.
Turn off the heat before adding the shredded cheddar, a handful at a time, stirring until fully melted. Fold in the sour cream last for a smooth, tangy finish. Season with salt and pepper to taste, adjusting slowly since the bacon adds saltiness too.
Ladle the hot soup into bowls and top generously with crispy bacon, extra shredded cheddar, and sliced green onions. Serve immediately while everything is warm and the cheese on top is just starting to melt. This is the moment that makes it a truly loaded cheddar potato soup.