Ograniczenie liczby wierszy to świetny sposób na przyspieszenie autouzupełniania. Nie wiem jednak, dlaczego ograniczasz się do 1000 wierszy:nie możesz wyświetlić 1000 wpisów w menu rozwijanym; czy nie powinieneś ograniczać się do może 10 wpisów?
Na podstawie twoich komentarzy poniżej, oto przykładowe zapytanie do bazy danych, które powinieneś być w stanie dostosować do swojej sytuacji:
String queryString = "select distinct b.title from Books b where b.title like ':userValue'";
Query query = entityManager.createQuery(queryString);
query.setParameter("userValue", userValue + "%");
query.setMaxResults(20);
List<String> results = query.getResultList();