Place beans in a large bowl and cover with water 3-4 inches above the beans. Soak for at least 4-6 hours.
In a large pot over medium heat, combine the beans and chicken stock and bring to a simmer. (Drain the beans before adding them to the pot.)
While beans are simmering, melt butter in a large skillet over medium heat. Add minced garlic, carrots, and celery and saute for 10 minutes. Add this to your pot.
In the same skillet over medium-high heat, saute bacon for 10-15 minutes, or until crisp. Drain grease and add to the pot.
Add remaining ingredients (chopped ham, diced tomatoes, onion powder, Worcestershire sauce, dried parsley, garlic powder, water, garlic salt, pepper, and bay leaf.
Continue to simmer the soup over medium heat, stirring frequently, until the beans are tender and the soup has thickened. This should take about 45-60 minutes. Remove the bay leaf before serving.