In a large pot, warm the oil/butter over medium heat. Add the chopped onion and sauté for 2-3 minutes. Cut the tops off and reserve for garnish. Cut the rough ends off the bottom.
Chop the rest of the asparagus into short segments and add to the pot. Sauté for another 3-5 minutes--until the asparagus in bright in color and tender. Add the beans, stock and cayenne to taste. Simmer for 20 minutes, uncovered.
Using an immersion blender, puree the soup until smooth. Add the yogurt and puree again. Salt and pepper to taste, and add a squeeze of lemon.
Place a small skillet over medium heat. Brown the bacon; then add the asparagus tops to the bacon. Sauté for 1-2 minutes. Drain and garnish the soup with the bacon and asparagus.