Sort through the dried beans and remove any small stones, damaged beans, or debris. Rinse the beans thoroughly in a colander.
Place the beans in a large bowl and cover with at least 2 to 3 inches of cold water. Soak for 8 to 12 hours or overnight.
Drain and rinse the soaked beans. Set aside.
Heat olive oil in a large Dutch oven or heavy-bottomed soup pot over medium heat.
Add the onion, carrots, and celery. Cook for 5 to 7 minutes, stirring occasionally, until softened.
Add the garlic, thyme, smoked paprika, black pepper, and red pepper flakes, if using. Cook for 30 seconds until fragrant.
Add the soaked beans, ham bone, 1 cup diced ham, chicken broth, water, and bay leaves. The beans should be covered by about 1 inch of liquid.
Bring the mixture to a gentle boil. Reduce heat to low, cover partially, and simmer for 1½ to 2½ hours, stirring occasionally, until the beans are completely tender.
Add additional hot water or broth if the liquid level becomes too low before the beans are tender.
Remove the ham bone and bay leaves. When cool enough to handle, remove any meat from the ham bone. Chop or shred the ham and return it to the pot.
Stir in the remaining 1 cup diced ham. Simmer for 5 to 10 minutes until warmed through.
For a thicker broth, mash some of the beans against the side of the pot using a potato masher or wooden spoon. Stir well.
Taste and add salt only if needed. Serve hot, topped with chopped parsley if desired.