You have a price to pay:
- At index time, using ngrams: that's slowing down the ingestion and take much more space
- At search time, using wildcards: that's slowing down the search.
Something you can look at: https://www.elastic.co/guide/en/elasticsearch/reference/current/search-suggesters.html
May be that can help but I'm not sure though.