Ci sono pro e contro di una situazione del genere e la scelta finale dipende da come vorrai usare un componente.
Creare un componente personalizzato è la soluzione per me migliore (visto che una roba simile alla tua l'ho fatta), però ti faccio alcune domande

1. quanto è grande la tabella che devi interrogare? quante info per ogni record devi mantenere? quanto cambia la tabella?
mi spiego, se la tua tabella è di piccole medie dimensioni, con pochi campi (che hanno grandezza minima)e che cambia raramente, la soluzione più indicata è mantenere il tuo valore e la chiave in un hashmap sempre in memoria e la ricerca come dici tu diventa ottimale.
Devi inoltre implementare eventuali meccanismi di update della tabella (se qualcuno modifica i dati devi mantenere la consistenza degli stessi)
Se la tabella inizia a crescere come campi, puoi comunque mantenere solo pochi dati in memoria ed eventualmente fare interrogazioni ad hoc (soluzione che ho adottato io)
Inoltre se la tabella è grande anche come numero di record, non diventa subito un problema mantenerla in memoria, ma diciamo che non devi programmare pensando che hai risorse infinite (cosa che si tende a fare oggi).
2. con quale frequenza usi il componente e la struttura in memoria? Pensi di avere un campo che usi tanto (quindi continui accessi creano problemi), magari per riferirti a campi della tabella differenti? se la risposta alla seconda domanda è no, conviene un'interrogazione al db che non mantenere dati che usi poco o niente.
3. pensato meccanismi di temporizzazione prima di attivare la ricerca (es. non ricercare ogni tasto, magari appena ti fermi ogni 2/3 sec)?
4. pensato a meccanismi di astrazione per generalizzare e riutilizzare il componente (e si può fare te l'assicuro)?

Inizia a valutare queste cose, già dovrebbero darti un'idea dei vantaggi e svantaggi di una scelta