In a large soup pot, melt butter with olive oil over medium heat. Add the chopped onion and a pinch of salt, then cook, stirring often, until the onion is soft and lightly golden around the edges.
Stir in the minced garlic and cook for about 30 seconds, just until fragrant. Sprinkle the flour over the vegetables and cook, stirring constantly, for 1 to 2 minutes to form a pale roux.
Slowly pour in the broth while stirring to dissolve the roux, scraping the bottom of the pot to release any browned bits. Add the diced potatoes and dried thyme or Italian seasoning, then bring the mixture to a gentle boil.
Reduce the heat to a steady simmer and cook for 15 to 20 minutes, or until the potatoes are very tender and easily pierced with a fork. Turn off the heat.
Use an immersion blender to puree the soup directly in the pot until it reaches your desired consistency, leaving some small chunks if you like a rustic texture. If using a regular blender, carefully blend the soup in batches and return it to the pot.
Return the pot to low heat and stir in the half and half and shredded cheddar cheese until the cheese melts and the soup is velvety. Taste and season generously with salt and freshly ground black pepper.
Ladle the Creamy Potato Soup into bowls and top with chives, extra cheese, and bacon or ham if using. Serve hot with crusty bread or a simple salad.