1. Cook the Bacon and Onion
In a large skillet, cook the bacon over medium heat for 6 to 7 minutes, until crisp. Drain on paper towels, crumble, and set aside. Reserve 2 tablespoons of the drippings in the skillet. Add the chopped onion to the drippings and cook until softened, about 6 minutes.
2. Simmer the Potatoes
3. Make the Roux
In the same skillet used for the bacon, melt the butter over low heat. Stir in the flour with a whisk until smooth. Cook for 1 minute, stirring constantly. Slowly whisk in 2 cups of milk until blended and smooth.
4. Build the Soup Base
Pour the milk mixture into the pot with the potatoes and broth. Add the remaining 2 cups of milk, along with the salt and pepper. Cook over medium heat, stirring frequently, until the soup thickens and bubbles.
5. Add the Fillings
Stir in the diced ham, half the bacon, the sour cream, 2 cups of Cheddar cheese, and ½ cup of green onions. Cook gently until the cheese melts and the soup is heated through.