Put the butter, three tablespoons of oil, the onions and a teaspoon of salt in a large saute pan on a medium heat and cook, stirring often, for 18-20 minutes, until soft and deeply golden brown (you don’t want the onions to burn or become crisp, so lower the heat as necessary).
Transfer two-thirds of the fried onions to a bowl with the remaining three tablespoons of oil, stir to combine and set aside until you’re ready to serve.
Return the pan of remaining onions to a medium heat, add the garlic and fry, stirring, for two minutes. Add the tomatoes, tomato paste, basil, habanero (if using) and two teaspoons of salt, and fry, stirring often, for seven minutes. Increase the heat to medium-high, add the stock, 300ml water and a good grind of pepper, and bring up to a simmer. Turn down the heat to medium, cook for 12 minutes, then lift out the habanero (if using) and squeeze to remove any liquid. Finely chop the habanero, then stir into the bowl of reserved fried onions.
Leave the soup to cool for five to 10 minutes, so it’s not super-hot, then transfer to a blender and blitz until completely smooth.
Meanwhile, cook the orecchiette in a big pot of salted boiling water until al dente, then drain and divide between four bowls. Divide the soup across the four bowls, spoon the cream on top, then scatter over the reserved fried onion mix and serve.