Dice the onion, carrots, and celery into ½-inch pieces. Mince the garlic, dice the zucchini, trim and cut the green beans, and drain and rinse both cans of beans. Pat the chicken dry and measure out the spices.
Heat the olive oil in a Dutch oven over medium heat. Add the onion, carrots, and celery and cook for 7 to 8 minutes until softened, then stir in the garlic, oregano, basil, thyme, and red pepper flakes and cook for 1 minute until fragrant.
Pour in the broth, water, and crushed tomatoes and scrape up any browned bits. Stir in both beans, bay leaves, salt, and black pepper, then nestle in the whole chicken breasts and tuck in the Parmesan rind. Bring to a boil.
Reduce the heat to medium-low, cover, and simmer gently for 18 to 22 minutes, until the chicken reaches 165°F on an instant-read thermometer. Avoid a rapid boil, which can toughen the meat.
Transfer the chicken to a cutting board and rest for 5 minutes, then shred with two forks. Leave the Parmesan rind and bay leaves in the pot and cover the chicken to keep it warm.
Bring the soup back to a steady simmer and stir in the ditalini and green beans. Cook for 4 minutes, then add the zucchini and cook for 4 to 6 minutes more, until the pasta is al dente. Add a splash of water or broth if it looks too thick.
Reduce the heat to low, return the shredded chicken to the pot, and stir in the baby spinach until wilted, 1 to 2 minutes. Remove the Parmesan rind and bay leaves, stir in the balsamic vinegar, and season to taste.
Ladle into bowls, making sure each serving gets plenty of chicken, beans, and pasta. Top with grated Parmesan and torn basil, and drizzle with olive oil if desired. Let cool slightly before eating.