Soak beans overnight in a bowl with at least 3 cups of water. Rinse beans with cold water and drain.
In a dutch oven or soup pot, heat olive oil. Add onion, carrot, celery, garlic powder, and pepper. Saute for 10 minutes until onions are softened.
Add ham and saute for another 5 minutes or until ham starts to cook a bit.
Add drained beans and broth. Bring to a boil and then reduce heat to simmer. Cover and cook for 90 minutes or longer, until the beans are soft and the soup is as creamy as you want it. The longer you cook the soup, the creamier it will be. If the soup is too thick, add more broth.
Season soup with salt and pepper to taste. Remove from heat and serve with a little grated Parmesan on top.