Andei pesquisando e encontrei como fazer nos bancos mais usados. É assim:
Supondo que possuo a tabela 'tabela' com o campo 'campo' com os seguintes valores:
CAMPO
---------
Maca
Maçã
Macaco
Amanhã
Jaca
Maçaneta
Oracle 10g:
alter session set nls_comp=linguistic;
alter session set nls_sort=binary_ai;
Pronto. O Select desta sessão pegará ignorando o acento e ordenando sem considerá-lo.
select campo from tabela where campo like '%aca%';
ou
select campo from tabela where campo like '%açÃ%';
CAMPO
---------
Jaca
Maca
Maçã
Macaco
Maçaneta
MySQL:
select campo from `tabela`
where `campo` like _utf8 '%aca%' collate utf8_unicode_ci;
ou
select campo from `tabela`
where `campo` like _utf8 '%açÃ%' collate utf8_unicode_ci;
CAMPO
---------
Maca
Maçã
Macaco
Jaca
Maçaneta
PostgreSQL:
select campo from tabela
where lower(to_ascii(campo)) like lower(to_ascii('%açÃ%'));
ou
select campo from tabela
where lower(to_ascii(campo)) like lower(to_ascii('%aca%'));
CAMPO
---------
Maca
Maçã
Macaco
Jaca
Maçaneta
Para ordenar basta usar a cláusula 'order by'; no Oracle foi pré-estabelecida a maneira para a sessão.