With the danger of eing a database bore....
You should design you database and let that determine how you search for your data, and design the form from that.
How is you data stored? do you have all the data in one table or do you have separate keywords, author and title tables?
If the data is in separate tables I would go for three separate searches and then use then display the data eg store the results for each search in an array and then display the array.
Also I can see the benefit of trying to use generic fields on your form but does the data really support this ie Keywords how many are there? with your form you have a maximun of four and then you can't use title or author. Then consider author - if someone enters the full name do you really want to start your search on the first name - if not how do you decide if it the first or last name and how would you split it? - better to have a dedicated author fields where the first and last names can be entered and used appropriately.
Optimising your data, you can use secondary idices to reference your data if it is stored in one table ie an index for author etc.
However my first thought are that one table would not be good especially for keywords a book many have one or many keywords this would point to having a keyowrds/book_id reference table.
Then Title - how often would you get the full title - therefore this requires pattern matching. It would be difficult to optimize when a user adds a pattern matching at the beginning, as most keys use the leftmost letters
Hope I haven't gone on too much
Mark