Place the cauliflower florets, potato, and onion in a saucepan with the butter and oil. Heat gently and, when the contents start to sizzle, cover with a lid and sweat everything over a low heat for about 10 minutes. The vegetables should not be at all colored.
Add the stock and bring to a boil, then pour in the milk and return gently to a boil. (This way, there will be no scum forming in the milk.) Season to taste, then simmer, uncovered, for 10-15 minutes when the vegetables should be soft.
Pour in half the cream, then puree in a food processor or blender, or blend in the pan with an immersion blender. Pass the puree through a sieve into a clean pan, rubbing with the back of a ladle.
Stir in the rest of the cream. Taste for seasoning and bring the soup to a boil. Ladle into soup plates, top with sorrel shreds, and add a spoonful of caviar to each. Serve.
Recipe courtesy of Gordon Ramsay's A Cook for All Season