Storing everything in one big object may work while the database isn’t very big, but once it does get big this will slow down the page considerably, because this whole object has to be downloaded.
As for the AJAX, you could do a few things:
Set a minimum number of characters before running the AJAX, e.g. don’t autocomplete for just one character, but only start when there are at least two or three
Don’t fire an AJAX query immediately when a user types, but set a timout to fire it in say 500ms. When the user types something else, cancel the previous timeout and start a new one for the new string. That way you only fire an AJAX request when the user stops typing, and not for every letter he types (which may be annoying for the user as well, too much going on).