Take the sausage meat out of its casings and crumble it into a large soup pot, along with the bacon (I cut it up using kitchen shears).
Cook over medium-high heat for 10-12 minutes or until the sausage and bacon are somewhat crispy/the fat has been rendered out. Meanwhile, prep the other ingredients.
Transfer the sausage and bacon to a plate (I don't line it with paper towel because the extra fat adds more flavor, but you can if you want). Leave about 2 tablespoons of fat in the pot (spoon any excess out).
Add the onion to the pot and sauté it for 3-5 minutes or until it's softened and starting to lightly brown.
Stir in the garlic and cook for 30 seconds.
Add the beans, chicken broth, Italian seasoning, and rosemary. Give it a good stir and scrape up any brown bits off the bottom of the pot.
Take the pot off the stove. Using an immersion/stick blender, purée the soup. I like to leave some beans whole. The soup will thicken a bit more as it cooks, but the thickness/texture will be similar to what it is after you do this part, so keep that in mind. If you don't have a stick blender, transfer a ladle or two of beans to a regular blender, or use a potato masher or fork for a more rustic texture.
Return the sausage and bacon to the pot and add in the chopped carrots as well. Increase the heat to high. Once the soup starts to boil, cover the pot with the lid slightly ajar and reduce the heat so it's simmering. Cook for 15-20 minutes or until the carrots have softened and the soup has thickened up a bit more.
Stir in the spinach and let it wilt for a minute or two. Taste and season with salt & pepper as needed. Serve immediately.