Heat butter and oil in a saucepan. Add onions and cook and stir for about 7 minutes, until soft. Add the garlic and cook for a couple minutes more, then remove from heat.
Place the asparagus ends in a pan of boiling water with a little salt and boil for 10 to 15 minutes, depending on the thickness of the stalks.
Blend half the asparagus with 250ml of stock and half of the onions in the blender. Pass the blended asparagus through a fine sieve to remove the fibrous bits. I find the best way is to use a ladle to push the soup in circular motions through a sieve into a large bowl.
Place the strained soup in a saucepan and bring to a gentle simmer. Season with salt and pepper to taste. Warm through, then pour into soup bowls to serve.
For that luxurious look, stir in some cream at the end.