Heat a large pot or Dutch oven over medium heat and add the chopped bacon. Cook, stirring occasionally, until the bacon is crisp and the fat has rendered, about 7-8 minutes.
Use a slotted spoon to transfer the bacon to a paper towel-lined plate. Leave about 3 tablespoons of bacon fat in the pot (drain off excess if there is more).
Add the butter to the pot. Once melted, stir in the onion, celery, and jalapeño (if using). Cook 5-6 minutes, stirring often, until softened and just starting to brown around the edges.
Stir in the garlic and cook about 30 seconds, until fragrant.
Sprinkle the flour over the vegetables and stir to coat. Cook 1-2 minutes, stirring constantly, to cook off the raw flour taste. The mixture will look thick and pasty.
Slowly pour in the chicken broth while stirring and scraping the bottom of the pot to release any browned bits. Keep stirring until the flour is fully dissolved and the liquid is smooth.
Add the diced potatoes, smoked paprika, thyme, salt, and black pepper. Stir to combine.
Bring the soup to a gentle boil, then reduce the heat to medium-low. Simmer uncovered 15-20 minutes, or until the potatoes are very tender and easily pierced with a fork. Stir occasionally so nothing sticks to the bottom.
For a creamy but still chunky soup, use a potato masher to lightly mash some of the potatoes right in the pot. Or use an immersion blender and pulse a few times. Do not fully puree, or the texture can turn gluey.
Stir in the milk and half-and-half (or cream). Add the shredded cheddar cheese and stir until melted and smooth. Keep the heat on low and avoid boiling once the dairy is in.
Remove the pot from the heat and stir in the sour cream until fully combined. Taste and adjust salt and pepper to your preference.
Ladle the hot potato soup into bowls. Top with the reserved crispy bacon, extra cheddar cheese, green onions or chives, a dollop of sour cream, and a dash of hot sauce if you like.