Heat the olive oil and butter in a large pot over medium heat.
Add in the diced onion, ham bone if using, and garlic. Cook, stirring occasionally for 3-4 minutes until onion is soft.
Pour about 1/4 cup of water into the pot and use a wooden spoon to scrape up any browned bits from the bottom of the pan.
Add the remaining water, brown sugar, bay leaves, thyme, sage, rosemary, and paprika to the pot and stir. At this point if you are not using a ham bone, add in the 2 cups of chopped ham as well. If using dried beans, add them to the pot now. If using canned beans, do not add them yet.
Bring the mixture to a boil. Reduce heat to low and simmer, covered for 60 minutes, stirring occasionally.
Once the 60 minutes is up, discard the ham bone if using. If you haven't yet, add in your chopped ham, and if using canned beans, add them to the soup now. Simmer over low heat for 20 more minutes until beans are soft.