Warm a large pot over medium heat. Add the butter and olive oil.
When the butter melts, stir in the onion with a pinch of salt. Cook 4–5 minutes, until soft and translucent.
Add the garlic, thyme, and smoked paprika. Cook 30 seconds, just until fragrant. Don’t brown the garlic—it can turn bitter.
Sprinkle in the flour and stir to coat the onions.
Cook 1–2 minutes, stirring often, to remove the raw flour taste. It will look pasty—that’s good.
Slowly whisk in the broth, a little at a time, to avoid lumps. Keep whisking until smooth and slightly thickened.
Add the frozen hashbrowns.
Stir, bring to a gentle simmer, then reduce the heat to medium-low. Cover partially and cook 12–15 minutes, stirring occasionally, until the potatoes are tender and the soup has thickened.
Pour in the milk and cream. Stir and warm through 3–5 minutes. Do not boil after adding dairy to prevent curdling.
If using, stir in the cheddar until melted.
Taste and season with salt and pepper.
For extra creaminess, stir in sour cream off the heat. Adjust consistency with a splash of broth or milk if too thick.
Ladle into bowls and top with green onions, bacon bits, and a little extra cheese if you like.