Esta expresión:
to_tsvector('simple', (COALESCE(title::TEXT), ''))
no es sargable contra su índice.
Debe declarar el índice en la expresión exacta que se utiliza en la consulta:
CREATE INDEX products_gin_title
ON products
USING GIN(to_tsvector('simple', COALESCE(title::TEXT,'')))
(o hacer que Ruby genere la expresión que se usa en el índice).
Si desea que se indexen varias columnas, simplemente concatenelas:
CREATE INDEX products_gin_title
ON products
USING GIN(to_tsvector('simple', title || ' ' || product_type || ' ' || platform_id))
pero, de nuevo, Ruby debería estar filtrando exactamente en la misma expresión para que el índice sea útil.