Is this performance hit something you are already experiencing now? Or is it something you fear will happen?
Either way, sf::VertexArray does not allow drawing sub-ranges of vertices. You can only draw all or none of them. This normally suffices since you would have a 1:1 mapping of an sf::VertexArray to an entity. Its usage in the context of tilemaps is something that is common, but that was not its originally intended purpose.
Before trying anything, you should really measure the performance of your application carefully. It might turn out that a performance hit might not even be caused by drawing the VertexArray but instead something else.
If you do determine that it is the VertexArray causing the performance drop, you have to bear in mind that on the GPU the vertices that are not within the viewport are culled anyway so you would only be saving on the cost of the data transfer by reducing the amount of vertices you draw. If this is really the bottleneck, you can either split your level up into multiple VertexArrays whose size is aligned to what is visible on the screen and perform CPU culling on a VertexArray by VertexArray basis. This way, you would only need to draw at most 4 VertexArrays to make sure your level is rendered seamlessly.
The second method, if you really have a lot of CPU time to spare, is to simply recreate the VertexArray every frame based on what is visible and draw it. The GPU wouldn't care because from its point of view, SFML is sending it new data every frame anyway.
The most important thing to do first is to measure. Premature optimization is often the root of almost all evil.