In a large soup pot, cook the Italian sausage and chopped bacon over medium heat. Let them brown and crisp up—this not only adds flavor but also gives you a great base. Once done, remove the meat and set it aside, leaving some rendered fat in the pot for cooking the next ingredients.
Add the diced onion into the pot and let it soften for about 3–4 minutes. Stir in the minced garlic and cook just until fragrant, about 30 seconds. This builds the aromatic base of the soup and blends well with the sausage flavor.
Now pour in the chicken broth, white beans, Italian seasoning, and rosemary. Stir everything together, scraping up any browned bits at the bottom of the pot—they carry loads of flavor. Turn off the heat for a moment and use an immersion blender to partially puree the soup. Blend as much or as little as you want, depending on your preferred texture.
Put the cooked sausage and bacon back into the pot, along with the chopped carrots. Bring the soup to a gentle boil, then lower the heat and let it simmer uncovered or with the lid slightly ajar. Give it 15–20 minutes to allow the flavors to come together and the carrots to soften.
Toss in the baby spinach and let it wilt for a minute or two. Taste the soup and season with salt and black pepper as needed. Once everything is hot and flavorful, you’re ready to serve!