In a large Dutch oven or heavy-bottomed pot, melt 2 tablespoons butter over medium heat. Add onion and celery and cook for about 5 minutes, stirring occasionally, until softened.
Stir in garlic and cook for another 30 seconds, until fragrant.
Add diced potatoes, broth, salt, pepper and smoked paprika. Bring to a boil, then reduce heat to medium-low and simmer for 12 minutes, or until potatoes are tender when pierced with a fork.
Meanwhile, in a separate saucepan, melt 3 tablespoons butter. Whisk in 3 tablespoons flour and cook for 1 to 2 minutes, stirring constantly.
Gradually whisk in the milk and cream, stirring until the mixture is smooth and slightly thickened, about 4 to 5 minutes.
Transfer, in batches, the cream mixture into the pot with the potatoes, stirring to combine between each addition. Reduce heat to low and stir in shredded cheese until melted and smooth.
Taste and adjust seasoning as needed.
Ladle the soup into bowls and serve. Garnish with fresh chives, as desired.