Preheat oven to 400F degrees. Wash potatoes; prick several times with a fork. Place on a baking sheet. Bake for 45 minutes to 1 hour until tender; let cool.
Meanwhile, cook bacon in a large soup pot or Dutch oven over medium heat until crispy, about 8 minutes. Remove bacon from the pot and drain on paper towels. Reserve 2 tablespoons bacon in the pot.
Add butter to the bacon drippings or if not using bacon, add 1/4 cup butter. Melt butter and add onions. Cook onions, stirring often, until soft. The onions will deglaze the bacon drippings from the pan.
Remove the pot from the heat. Make sure the butter mixture is not bubbling. Gradually stir in the flour until smooth. Return the pot to medium-low heat. Cook the flour mixture for 1 minute. Reduce heat to low or remove the pot from the heat.
Gradually stir in the milk and broth, whisking constantly. Increase the heat to medium and stir constantly until slightly thickened. See NOTE to avoid lumps. Add salt and pepper. Soup will thicken even more when potatoes and cheese are added.
Cut each baked potato in half lengthwise and scoop out potato with a spoon. Reserve potato skins for Baked Potato Skins or discard.
Chop potatoes on a cutting board or slightly mash potatoes in a bowl. I like to keep chunks of potatoes but some like them mashed. Add potatoes to the soup in the pot.
Bring mixture up to a simmer over medium heat, stirring constantly just until potatoes are thoroughly heated.
Crumble bacon. Stir in three-fourths of the bacon, 6 ounces of shredded cheese and sour cream and stir until cheese is melted and soup is thoroughly heated.
Sprinkle with remaining bacon and cheese. Add other toppings as desired.