In a large pot over medium heat, cook the bacon until crispy. Remove and set aside, leaving about 2 tablespoons of bacon fat in the pot.
Add the chopped onion and garlic to the pot and sauté until translucent, about 3–4 minutes.
Stir in the butter until melted, then sprinkle in the flour to form a roux. Cook while stirring for another 1–2 minutes.
Gradually whisk in the chicken broth, then add the milk and cream. Keep whisking until smooth.
Toss in the diced potatoes, bring everything to a gentle boil, then reduce to a simmer. Cook uncovered for 15–20 minutes or until the potatoes are tender.
Mash some of the potatoes in the pot for a thicker texture, or leave them all intact if you like it chunky.
Stir in the shredded cheese and cooked bacon (save a bit for topping). Let it melt through, then season with salt and pepper to taste.
Serve hot, garnished with chives or green onions and any extra bacon and cheese you held back. Enjoy!