Можно ли указать индекс в переменной?
Можно, если переменная содержит индексируемый тип данных. Ошибку вам выдало потому, что в переменной a содержится пустой список, у которого нет элемента с индексом 0.
a = [] #список
a[0] = 1 #ошибка потому что в списке нет 0 элемента и вообще никаких нет.
b = {} #словарь
b[0] = 1 #нет ошибки потому что отсутсвующие ключи словаря создаются в такой конструкции
разница в том что в списке элемент должен существовать как для чтения так и для записи
а в словаре он должен существовать только для чтения, потому что при записи он создается сам.

если нужен именно список, то надо заполнить его заранее.
a = [None]*100
a[0] = 1 #теперь ошибки нет потому что в списке 100 элементов None
a[100]  = 1 #снова ошибка потому что индекс 100 это 101 элемент по порядку, которого нет