Heat the olive oil in a large pot over medium heat. Add the onion and cook about 5 minutes, until soft and translucent.
Stir in the garlic and tomato paste and cook 1 minute, until fragrant.
Add the crushed tomatoes, beans, broth, dried basil, salt and pepper. Bring to a simmer.
Simmer uncovered for 20 minutes, stirring occasionally, so the flavors meld and the beans soften.
Blend about half the soup with an immersion blender (or transfer 2 cups to a blender, blend, and return to the pot), leaving some beans whole for texture.
Stir in the fresh basil, if using. Taste and adjust salt, then ladle into bowls and top with Parmesan.