LoadFromFile is costly, and should never be done more than once for the same image (unless it's no longer in memory), and certainly not every frame.
What you want is to do is pass around references/pointers of sf::Image objects. Create an image manager class to check for duplicates of filenames and the such, and return a reference based on that to use with sf::Sprite. And if it's the first time you're asking for an sf::Image of that filename, return a reference to a new one. Therefore, things are reused automatically and quickly, they're still in memory after all, until you choose to get rid of them. A std::map makes things like this pretty easy to implement I think.
As well, you can optimize things further by just prerendering your tiles into one big sf::Image using sf::RenderImage (in 2.0) before the game loop, because drawing one object every frame is more efficient than drawing several hundred/thousand.
http://www.sfml-dev.org/documentation/2.0/classsf_1_1RenderImage.htm