In a large pot, heat the butter and olive oil over medium-high heat. Add the onion and cook until softened, about 6-8 minutes. Add the ginger, curry powder, and salt and stir to combine. Add the sweet potatoes, vegetable broth, and water and bring to a boil. Once boiling, reduce the heat to medium, cover, and cook until the sweet potatoes are soft, about 15 minutes.
Remove from the heat and let cool for a few minutes. Working in batches, transfer the soup to a blender and purée until smooth. (Or, if you have an immersion blender, you can purée right in the pot.) Return the soup to the pan and place over medium-low heat. Add the coconut milk, half-and-half, and milk and stir to combine. Heat through.
Serve with chopped cilantro and plain Greek yogurt for garnish.