Cook the chopped bacon in a large pot over medium heat until crisp. Remove the bacon with a slotted spoon and set it aside, leaving the drippings in the pot.
Add the diced onion to the pot and cook for 4 minutes until softened. Stir in the minced garlic and cook for 1 minute more.
Sprinkle the flour over the onions and stir for 1 minute. Slowly whisk in the chicken broth, scraping the bottom of the pot. Add the diced potatoes and bring the mixture to a simmer. Cook for 15 minutes until the potatoes are fork-tender.
Mash some of the potatoes against the side of the pot to thicken the soup while leaving chunks for texture. Stir in the milk and butter, then simmer for 5 minutes. Add the shredded cheddar cheese a handful at a time, stirring until melted. Season with salt and black pepper.
Ladle the soup into bowls and top each serving with the cooked bacon, extra cheddar cheese, and sliced green onions.