If you're easily able to do it, (i.e. you're building rather than receiving the query), you could rank them by the conjunction of the search terms first:
ORDER BY ts_rank(vector, to_tsquery('A & B & C')) desc, ts_rank(vector, to_tsquery('A | B | C')) desc
Or just explicitly order by whether the conjunction matches:
ORDER BY case when to_tsquery('A & B & C') @@ vector then 0 else 1 end, ts_rank(vector, to_tsquery('A | B | C')) desc
I think either of these would have the property you want, but I don't know how they would otherwise affect the quality of the ranking. You should set up a test group of documents and make sure your mechanism ranks that group properly on test queries.
Joel