Is there a way to find a fact given its index?

There is not a direct way, but you can traverse the list of existing facts to come up to the one that has the required index. The following is an example of function that uses this technique:

def FindFactByIndex(idx):
    f = clips.InitialFact()
    while f is not None and f.Index != idx:
        f = f.Next()
    return f

This can easily be implemented in an environment-aware way. Of course the given implementation has a linear cost with respect to the total number of facts (which could be unknown, and significantly big), but at the moment and with the current CLIPS API, there is no other way to achieve the same goal more efficiently.