PostgreSQL not using index
The problem here is that it thinks to_tsvector is a very cheap operation to perform, even when performing it on an entire table.  Basically, it think it is the same cost as adding together two integers.  But of course it is not.  In the upcoming release 9.5, the default cost for that function has been increased 100-fold (which is probably still not enough to be accurate...but it should be enough to tip the scales for your case, which is all you need).

You can change the cost of that function yourself:

alter function to_tsvector ( regconfig, text) cost 1000;


(Note that because this is a built-in function, changes you make will not survive a pg_upgrade, or a dump, initdb and restore cycle)

This is much safer than fiddling around with the global cost parameters.

The general (global) cost parameters are described here, and ones for specific functions are described here.  The way the two interact with each other don't seem to be well-described anywhere in the docs.