In a large cast iron skillet, fry the bacon until crispy. Transfer to a paper towel-lined plate. Once cooled, break or cut it into small pieces. Reserve the grease if using it for the roux.
Heat a large Dutch oven over medium-high heat. Add the butter or reserved bacon grease. Whisk in the flour and cook for 2 minutes, stirring occasionally.
Gradually whisk in the milk and heavy cream, whisking continually until slightly thickened. Gradually add the chicken broth and whisk to combine.
Add the diced potatoes and bring to a low simmer, stirring every few minutes so the bottom doesn't burn.
Reduce the heat to low and simmer until the potatoes are tender, about 20 to 25 minutes. Smaller pieces cook faster.
Once the potatoes are tender, stir in the onion, garlic, parsley, thyme, salt, and pepper, followed by the cream cheese, sour cream, and shredded cheddar.
Simmer for another 10 minutes, or until the cream cheese has completely melted.
Stir in the bacon pieces, saving a handful for topping if you like. Taste and season with extra salt and pepper if needed.
Ladle into bowls or large mugs with handles and serve warm with your favorite toppings.