Boil the potatoes- Peel the potatoes and dice them into 1-inch pieces. In a medium pot, add enough cool water to cover the potatoes and add ½ teaspoon salt. Heat to boil and then simmer until tender while preparing the other ingredients.
Caramelize the onions- Heat the olive oil and butter in a large soup pot over medium heat. Rough dice the onions and add to the pot. Saute onions over medium to medium-high heat until they're caramelized golden brown, about 15 minutes.
Once the onions are browned, add the garlic and heat over medium heat for a minute, stirring to incorporate.
Add the flour and toss to coat. Continue to cook the mixture for another minute or two to remove the flour taste, stirring constantly.
Add the dried oregano, dried parsley, mustard powder, thyme, and black pepper. Stir and cook about 30 seconds, then add soy sauce, hot sauce, chicken broth, or vegetable broth. Cook on medium heat, stirring occasionally for about 5 minutes until the mixture has thickened slightly.
At this point, the potatoes should be ready. Make sure they're fork tender. Drain the potatoes and add the cream cheese and sour cream to them. Mash the potato mixture with a potato masher until mashed well and add the potatoes to the soup pot.
Stir the potatoes into the soup, mashing them further. If you want a very smooth soup, use an immersion blender or regular blender to blend further (see notes below for more options).
Turn the heat to low and add the half and half, cheddar cheese, and Parmesan cheese. Add 1 teaspoon salt and taste, adding up to ½ teaspoon more if needed.
Once the cheeses have melted completely, the soup is ready to serve.
Serve with additional toppings as desired.