01 - In a large pot or Dutch oven, cook the chopped beef bacon over medium heat until crispy. Remove with a slotted spoon and set aside, retaining approximately 2 tablespoons of rendered fat in the pot.
02 - Add the unsalted butter to the pot. Once melted, incorporate the onion, celery, and carrots. Sauté for 5 minutes until softened, then add minced garlic and cook for an additional minute.
03 - Sprinkle the all-purpose flour into the pot, stirring constantly for 2 minutes to eliminate raw flour taste and form a light roux.
04 - Gradually pour in the chicken or vegetable broth while scraping the pot's bottom to deglaze. Add the diced potatoes, smoked paprika, salt, and pepper, stirring gently to combine.
05 - Bring the mixture to a boil, then reduce heat to maintain a gentle simmer. Cook uncovered for 15 to 20 minutes until potatoes become very tender.
06 - Partially mash the potatoes directly in the pot using a potato masher or immersion blender to achieve a creamy texture with intact chunks for texture.
07 - Stir in the whole milk and heavy cream, simmering for 5 minutes to blend. Add shredded cheddar and mozzarella cheeses, stirring until fully melted and smooth.
08 - Return the cooked beef bacon to the pot, reserving some for garnish if desired. Adjust seasoning with additional salt and pepper to taste.
09 - Ladle the soup into bowls and garnish with reserved beef bacon, extra shredded cheddar cheese, and chopped chives or green onions. Serve warm.