@PhilipBae, I'll second @karthickky2k4's recommendation to look at Adobe Search and Promote (SnP). We're using it on two sites. I'm not sure what you mean by "search has to go through Publisher", but in our case load on the Publish servers is low and controllable, because it's only hit when indexing content, not when conducting the search or presenting results.
We're using SnP to search our product catalog, not (yet) for full-text search of AEM pages. Catalog inventory can change throughout the day. An SnP crawler comes along every half hour and queries the JCR for nodes that have changed since the last crawl, and updates the SnP index. We also do a full re-index every night.
To search, we present a form to get the search terms, then issue an AJAX call from the page to SnP, which in our case returns JSON data that the front-end consumes and formats for presentation. So, our solution is heavy on the JavaScript side, but not on the Publish server.
SnP is not without problems (but what is?): documentation is very sparse, it's a cloud-hosted solution with limitations on testing environments, no ability to export settings from one environment and import into another, and some limitation on how you can search -- e.g. from what I understand, it's not possible to have multiple conditions on the same "column" like "SquareFootage > 1000 AND SquareFootage < 5000". We get around this by creating extra fields and mapping the same value to them: SquareFootage -> SFMin and SFMax , and the query becomes "SFMin > 10000 AND SFMax < 5000". In other instances we do only very simple filtering in the SnP query, and further filter the results on the page in JavaScript.
The benefits are that it doesn't impose a lot of load on the Publisher (again, depending on what you mean by "a lot of load"), and is supported by Adobe, which may outweigh the limitations.