Cook the bacon in a Dutch oven over medium heat until crisp, 7 to 9 minutes. Transfer it to a paper towel-lined plate and leave about 2 tablespoons of drippings in the pot.
Add the onion and cook until softened, about 5 minutes. Stir in the garlic for 30 seconds, then add the butter. Once melted, sprinkle in the flour and cook, stirring, for 1 minute.
Gradually whisk in the chicken broth, milk, and cream until smooth. Add the potatoes, salt, and pepper. Bring to a gentle simmer, cover partly, and cook for 15 to 20 minutes, stirring occasionally, until the potatoes are fork-tender.
Mash some of the potatoes against the side of the pot to thicken the soup while leaving plenty of chunks. Reduce the heat to low and stir in the cheddar until melted.
Remove the pot from the heat and stir in the sour cream. Taste and adjust salt and pepper. Do not boil after adding the dairy.
Serve topped with crisp bacon, green onions, and extra cheddar if desired.