Huge index for covered queries (indexOnly: true) or (indexOnly: false) with collection scan
Why is indexOnly: false. Isn't it supposed to be a covered index
  query? (see the explain later)


I believe this is a result of the isMultiKey : true field in the explain results.  Basically, currently indexOnly is never true when isMultiKey is true.

This is a known problem in general with multi key indexes.  You can find the relevant bug here:

https://jira.mongodb.org/browse/SERVER-3173

As well as some decent explanation in the linked/dupe bug here:

https://jira.mongodb.org/browse/SERVER-7595

I think you have done some manual munging of the fields here for some reason, but I would guess that search.keywords is the problem here.  Try an index without that as the final field and see if that performs better.


  I need to retrieve some additional fields from the collection (the id
  and the profile_picture url). Should I add them to the index to avoid
  hitting the collection, even if I'll never have to query them?


I'd recommend a separate index for those queries rather than massive single index.  If you end up with too many fields in the index you are going to lose most of the benefit by simply having to scan through a massive index instead of a collection.  An index that big will also likely have performance issues for updates/writes.