Before you plan to make the soup: place the beans in a large bowl. Pick them over to remove any debris. Cover with cool water by at least 1 inch. Let soak overnight at room temperature or in the refrigerator.
When you are ready to cook the soup: drain the beans into a colander and rinse them well. Set aside.
In a large pot or Dutch oven over low heat, cook the bacon over medium-low, stirring it occasionally until the fat has rendered and the bacon is crisp, about 8 minutes (be patient; low and slow is the name of the game here!). With a slotted spoon, remove the bacon to a plate and set it aside, leaving the drippings in the pot. If using olive oil instead, simply warm the oil in the pot.
Increase the heat to medium. Add the onion and cook until it begins to soften, about 3 minutes. Add the garlic, carrots, and celery. Stir and cook until the carrots just begin to soften, about 5 minutes.
Add the beans, ham bone (if using), bay leaf, and liquid. If you are NOT using a ham bone, use the broth for the liquid; if you ARE using a ham bone, use 6 cups of water *or* unsalted chicken broth. (If you use regular or even low sodium broth along with a ham bone, your soup may be too salty).
Increase the heat and bring the soup to a boil. Once it is boiling, reduce heat to medium-low. Place a lid on the pot, leaving it slightly ajar. Let the soup simmer, stirring it occasionally, until the beans are tender and beginning to break down, about 75 minutes.
Stir in the tomatoes, paprika, chili powder, cumin, thyme, and black pepper. Simmer the soup, uncovered, for an additional 20 minutes to allow the flavors to marry. If the soup becomes thicker than you would like, add water to reach your desired consistency. Remove the bay leaf and ham bone (if using). Stir in the vinegar and reserved bacon.
Taste the soup and add additional salt and pepper as desired. The amount of salt you need will vary based upon your broth and/or hambone; I added an additional 1/2 teaspoon salt and a pinch of black pepper. Serve hot, sprinkled with Parmesan and parsley.
*INGREDIENT NOTE: 15 bean soup mix is a bag with a mix of different varieties of dry beans (and it doesn't need to be exactly 15!); Hurst's and Goya are two popular brands (one is 15 and one is 16); Bob's Red Mill makes a 13 Bean Soup Mix that I like a lot as well. If your mix comes with a seasoning packet, discard the packet and use the beans only for this recipe.
TO STORE: Store leftover bean soup in an airtight storage container in the refrigerator for up to 3 days.
TO REHEAT: Rewarm soup in a Dutch oven on the stove over medium-low heat until hot. You can also reheat leftovers in the microwave until heated through.
TO FREEZE: Place soup in an airtight freezer-safe storage container in the freezer for up to 3 months. Let thaw overnight in the refrigerator before reheating.