Over medium heat in a large pot or dutch oven, cook bacon until brown and crisp. Remove from pot and set aside. Do not drain pan. You are using the bacon fat for flavoring.
Add the onion, celery and garlic. Cook until onion is soft and translucent.
Add the stock, basil, reserved bacon, potatoes, salt and white pepper. Bring to a boil, reduce heat to a low simmer and cook for about 20 minutes, or until potatoes are tender.
In a separate small saucepan, melt the butter over medium heat. Gradually whisk in the flour, making sure there are no lumps. Continue stirring the butter/flour combination (this is a roux) for about 3-5 minutes until it smells a bit "toasted."
Whisking constantly, gradually add the cream, very slowly, making sure there are no lumps and mixture is smooth. Cook for about 2 minutes, until cream is hot and mixture is thick.
Whisk the cream mixture into the stock/potato mixture. Cook over low heat for 10 minutes. Remove about half of the soup and puree in a blender or Ninja. Add the pureed soup back to the pot. Heat through.
Stir in the cheeses and remove from heat. Partially cover the pot and let it sit for about 5 minutes to melt the cheeses.
Stir again and serve, topping each bowl with a good amount of each garnish ingredient heaped in the center.