Heat the oil in a large pot over medium heat. Add the onion, carrots, and celery. Sauté for about 8-10 minutes, stirring occasionally, until softened.
Stir in the garlic and cook for another 1-2 minutes until fragrant. Add the leftover roasted vegetables, butter beans, cannellini beans, stock, bay leaf, and Parmesan rind (if using). Stir to combine.
Bring the soup to a boil, then reduce the heat to low and simmer for 20-25 minutes.
While the soup simmers, preheat your oven to 200°C (400°F). Toss the stale bread cubes with rapeseed oil, minced garlic (if using), and a pinch of salt. Spread evenly on a baking tray. Bake for 8-10 minutes, turning once, until golden and crisp.
Remove bay leaf from the soup. Use a potato masher or the back of a spoon to mash some of the beans and vegetables in the pot, creating a slightly thickened texture.
Season with salt and pepper to taste. Ladle the soup into bowls. Top with the crispy croutons, a sprinkle of grated Parmesan (or crumbled cooked Parmesan rind).