Как сделать idea-подобный поиск?
import re

names = ['ArrayList', 'LinkedHashMap']

for s in 'al', 'ali', 'arrli', 'li', 'lh', 'lhmap', 'hm':
    f = re.compile('\\w*'.join(s), flags=re.I).search
    print(f'{s:5}:', list(filter(f, names)))выхлоп:al   : ['ArrayList']
ali  : ['ArrayList']
arrli: ['ArrayList']
li   : ['ArrayList', 'LinkedHashMap']
lh   : ['LinkedHashMap']
lhmap: ['LinkedHashMap']
hm   : ['LinkedHashMap']
ArrayList
разделяешь на отдельные слова по заглавной букве, подчёркиванию и любым другим символам, допускаемым языком, в том числе и цифрам. получается два слова "array"  и "list".  регистр ужн оубрать, либо не учитывать его при поиске (либо учитывать, если хочется).
Далее для всех слов создаёшь комбинации, как было описано в комментарии выше, но не вручную, а автоматически
a + l = al
ar + l = arl
arr + l = arrl
...
array + l = arrayl
...
Если слов в идентификаторе больше двух, то проделываешь это для всех слов. Для каждой аббревиатуры записываешь, из какого идентификатора она была получена, одной аббревиатуре может соответствовать много различных идентификаторов).
Это может показаться страшным и занимающим кучу памяти, но идентификаторов в программах конечное число и оно довольно маленькое по машинным меркам.