For the soup, heat the olive oil in a medium non-reactive saucepan over medium-high heat. Add the celery, onion and carrot with a pinch of salt. Cook, stirring often, until the vegetables begin to soften, 10 to 15 minutes. Add the tomatoes with their juices, bouquet garni, stock and balsamic vinegar and cook 15-20 minutes more, until the tomatoes have broken down and the vegetables are very soft. Remove and discard the bouquet garni. Transfer the soup, in batches if necessary, to a blender and puree until smooth. Strain the soup into a clean saucepan and place over low heat. Stir in a generous pinch each of salt and pepper and cook 5 minutes more.
For the basil oil, heat a small pot of water over high heat. When the water comes to a boil, drop in the leaves and cook for 30 seconds. Immediately plunge the leaves into a bowl of ice water and let rest for 1 minute. Drain the leaves in a colander and remove any excess moisture from the leaves by squeezing them between two plates over the sink. Place the leaves in a blender with the 1/2 cup of olive oil and a pinch each of salt and pepper. Blend until smooth. Strain through a very fine strainer and place in a small zip-top bag.
When ready to serve the soup, place it in a warm soup bowl. Cut a very tiny piece out of the bottom corner of the zip-top bag and use this to decoratively drizzle a bit of basil oil over each bowl of soup. Place a few of the diced green or yellow tomatoes on top and serve.