01 - In a large pot or Dutch oven, cook the chopped beef bacon over medium heat until crisp. Remove with a slotted spoon and reserve approximately 2 tablespoons of rendered fat in the pot.
02 - Add unsalted butter to the reserved fat and melt. Incorporate the chopped onion, celery, and carrots, cooking for 5 minutes until softened. Stir in minced garlic and cook for an additional minute.
03 - Sprinkle in the all-purpose flour and cook, stirring constantly, for 2 minutes to form a roux.
04 - Gradually whisk in the chicken or vegetable broth, scraping the pot’s bottom to release browned bits. Add diced potatoes, smoked paprika, salt, and freshly ground black pepper.
05 - Bring the mixture to a boil, then reduce to a simmer. Cook uncovered for 15 to 20 minutes, or until potatoes are very tender.
06 - Partially mash the potatoes using a potato masher or immersion blender, maintaining some chunks to preserve texture.
07 - Stir in whole milk and heavy cream. Simmer gently for 5 minutes, then add shredded cheddar and mozzarella cheeses, stirring until fully melted and smooth.
08 - Return the cooked beef bacon to the pot, reserving some if desired for garnish. Adjust seasoning with additional salt and pepper as needed.
09 - Ladle the soup into bowls and garnish with extra shredded cheddar cheese and chopped chives or green onions as preferred.