Since we are dealing here with transcribed dialogue from video, I think there is a fairly high probability of repeated strings and of differences in meaning due to tone etc. that can be conveyed in the source medium - content hash may be problematic for subtitle translation.

Timestamp would probably be the most reliable identifier, but not perfect as subtitle timings may need to be adjusted.

Position is likely to be fairly good as it would be rare to have a video revised with different dialogue, but mistakes in the initial transcription are still possible.

I would start by checking what the SRT filter provides as its default ID in case that is useful.