Existe um método mais simples que é feio, mas acredito tecnicamente correto:extrair a maior fatia possível do array, ao contrário da fatia exata com limites computados. Isso evita as duas chamadas de função.
Exemplo:
select ('[5:7]={1,2,3}'::int[])[-2147483648:2147483647];
resulta em:
int4 --------- {1,2,3}