Place bacon in a large soup pot and cook over medium heat until crispy and brown. Transfer to a paper towel-lined plate and set aside, leaving the bacon fat in the pot. Add the onions and cook until starting to brown. Add celery, carrots, and garlic and cook, stirring occasionally, until vegetables start to soften, about 3-5 minutes.
Add remaining ingredients and bring to a boil. Reduce heat to a simmer. Cover and cook over low heat until beans are tender, about 1 1/2-2 hours. Season with salt and freshly ground black pepper, ladle soup into bowls, crumble bacon over each bowl and serve.