Sauté the aromatics: Heat 2 tablespoons olive oil in a large pot over medium heat. Add the diced onion and a pinch of salt.
Cook 5 to 7 minutes, stirring often, until soft and translucent. Stir in the garlic and cook 30 seconds, until fragrant.
Build the base: Add the tomato paste and cook for 1 to 2 minutes, stirring, to caramelize slightly—it should darken in color. Sprinkle in the dried oregano and red pepper flakes if using.
Add tomatoes and broth: Pour in the crushed tomatoes and 3 cups of broth.
If you have a Parmesan rind, drop it in now. Bring to a gentle simmer.
Simmer and blend in beans: Add the rinsed cannellini beans. Simmer uncovered for 12 to 15 minutes to meld flavors.
Fish out the Parmesan rind if using.
Blend until smooth: Add the basil leaves. Use an immersion blender to puree the soup until silky. For a countertop blender, work in batches and vent the lid slightly to release steam.
Blend until completely smooth.
Adjust thickness: If the soup is too thick, add more broth until it’s where you like it. Return to a gentle simmer for 2 to 3 minutes.
Finish with yogurt: Reduce heat to low. In a small bowl, whisk the Greek yogurt with a ladle of hot soup to temper it.
Stir the tempered yogurt back into the pot. Do not boil after adding yogurt to avoid curdling.
Season and brighten: Taste and season with salt and pepper. Add a small squeeze of lemon to lift the flavor.
Stir in a tablespoon or two of grated Parmesan if you want extra richness.
Serve: Ladle into bowls and garnish with torn basil, a drizzle of olive oil, cracked black pepper, and a sprinkle of Parmesan if desired.