Dice the onion, carrots, and celery into even 1/4-inch pieces, mince the garlic, and rinse and drain the beans. Pat the chicken dry, then juice the lemon and chop the parsley.
Season the chicken with 1/2 teaspoon salt and 1/4 teaspoon pepper. Sear in olive oil over medium-high heat for 3 to 4 minutes per side until deep golden brown, then transfer to a plate.
Reduce heat to medium and sauté the onion, carrots, and celery with 1/2 teaspoon salt for 6 to 8 minutes, scraping up the browned bits, until the onion is soft and translucent.
Stir in the garlic, thyme, and oregano and cook for 30 to 60 seconds, just until fragrant. Watch closely so the garlic does not burn.
Pour in the broth, add the bay leaves, and return the chicken and any juices to the pot. Bring to a boil, then partially cover and simmer for 15 to 18 minutes until the chicken reaches 165°F.
Transfer the chicken to a cutting board, rest for 3 to 5 minutes, then shred into bite-sized pieces with two forks.
Stir both beans into the broth with the remaining 1/2 teaspoon salt and 1/2 teaspoon pepper. Mash about 1 cup of beans against the side of the pot, then simmer uncovered for 10 minutes to thicken.
Discard the bay leaves, stir in the shredded chicken and spinach for about 2 minutes until wilted. Off the heat, stir in the lemon juice and parsley, then taste and adjust seasoning.
Ladle the hot soup into bowls, top each with freshly grated Parmesan, and serve right away.