Em resposta às suas 3 perguntas:
(1) BaseAdapter , de acordo com os documentos do Android, é apenas uma superclasse de vários tipos de adaptadores, um dos quais é ArrayAdapter. Existem vários outros adaptadores derivados BaseAdapterque se adaptam a finalidades diferentes. Como resultado, é improvável que haja alguma diferença de eficiência entre os dois; você apenas obtém acesso a um conjunto diferente de funções / métodos com as várias subclasses.
(2) A eficiência do seu ArrayAdapterdepende da eficiência do que você está fazendo dentro dessa classe, ou seja, o processamento de bitmaps e outros dados.
(3) Você provavelmente poderia descobrir uma maneira de trabalhar ListViewusando um tipo diferente de adaptador; no entanto, o motivo pelo qual ArrayAdapterfunciona é porque geralmente faz sentido, visto que o objetivo é construir uma lista interativa. O ArrayAdaptepega um Array, geralmente um ArrayListde objetos, que então processa para criar as informações de apoio para o ListView. Nesse sentido, a configuração de ArrayList-> ArrayAdapter-> ListViewlogicamente faz sentido.