Heat the olive oil in a large pot over medium heat.
Add shallots and celery and sauté until softened, about 4-5 minutes.
Add garlic, sage, and turmeric. Cook for another 2 minutes until fragrant.
Stir in the drained cannellini beans and season with salt and fresh black pepper.
Add 10-12 cups of water and the parmesan rind. Bring to a boil and then let simmer for 15 minutes.
Partially purée the soup either with a stick blender or by scooping 4 cups of the soup with lots of beans into a high-speed blender. Blend until smooth (this brings some thickness and creaminess to the broth). Simmer soup for another 10 min
Check for seasoning before adding in the orzo and simmer for 10 minutes, stirring occasionally (it can stick to the bottom so be sure to do this) until the orzo is al-dente.
Squeeze in the juice of 2 lemons. Taste and adjust seasoning as needed.
In a small bowl, combine the parsley, dill, reserved lemon zest, minced garlic, and salt. Pour in the olive oil and stir to combine. (I made this all in a mini food processor.)
Ladle the soup into bowls. Top each bowl with a generous spoonful of the gremolata and freshly grated parmesan. Serve with crusty bread or focaccia on the side for dipping.
Enjoy, preferably with family or friends!