Heat a stockpot over med-high heat. Add bacon and cook until crisp, remove with a slotted spoon onto a plate lined with paper towels, drain half the bacon grease and leave the rest in stockpot.
Reduce heat to medium, add onions. Cook until soft and translucent, about 5 minutes. Sprinkle flour over onions and cook, stirring constantly, about a minute (this will remove the "raw" flour taste).
Slowly pour in chicken stock, whisking constantly until smooth. Add potatoes, bring to a boil then simmer until potatoes are very soft (15-30 minutes, depending on size of potatoes).
Using a potato masher or something similar, crush potatoes to thicken soup, leaving some chunks but allowing some to "melt" into the soup. Stir in cheese until melted and smooth. Add milk, bring back to a simmer and cook for an additional 10 minutes until very hot.
Ladle soup into bowls and top each as desired.
