This convert to sf::Image first.
Passing an sf::Texture to TGUI is actually not the best strategy if you want performance, as the texture can't be cached. Each time you pass the same sf::Texture to a function, the code creates a copy of the sf::Texture, assuming it is a completely new texture. Caching the tgui::Texture yourself or passing the filename each time will make sure the same texture is shared the whole time.
If you have a tilemap consisting out of e.g. 16 images, even when passing the filename to setTexture, the code is going to load the image 16 times in total. The cache currently works on both filename and partRect, so if you load a different part then it will reload the image as well. In the 0.9-dev branch that I started a while back but stopped working on, the image would be loaded only once. It would reuse the image and only create a new texture based on the partRect (if you didn't use the rect before), but it couldn't be done in 0.8 for backwards compatibility.
So for now loading different pieces of the same image is always going to be inefficient, but passing sf::Texture directly causes no caching to occur at all so it should be avoided if you care a lot about performance.