In a large Dutch oven over medium heat, cook the diced bacon until crisp and golden brown.
Use a slotted spoon to remove the bacon to a paper towel-lined plate, leaving 2 tablespoons of bacon fat in the pot.
Add the butter to the bacon fat and melt, then stir in the onion and celery. Sauté for 5-7 minutes until softened.
Add the garlic and cook for 1 minute until fragrant.
Whisk in the flour and cook for 2 minutes to toast the flour, stirring constantly to form a smooth paste.
Gradually pour in the chicken broth while whisking continuously to prevent lumps.
Add the cubed potatoes, salt, pepper, and thyme. Bring the mixture to a gentle boil.
Reduce heat to medium-low, cover, and simmer for 15-20 minutes or until the potatoes are fork-tender.
Optional: Use an immersion blender to pulse the soup 3-4 times, or mash a few potatoes with a fork to reach desired creamy consistency.
Stir in the milk and heavy cream, then simmer for an additional 5 minutes.
Turn off the heat and gradually fold in the shredded cheddar cheese until completely melted.
Adjust seasoning with salt and pepper to taste.
Serve hot, garnished with reserved crispy bacon and fresh chives.