One thing to remember about indexes is that MySQL (I'm not sure about others) will only use one index per table at a time. So, for exampe, if you have an index on quiz_attempts.timefinished, and another index on quiz_attempts.uniqueid (BTW, yes, it looks like the unique constraint gets translated to an index), then MySQL will only use one index or the other; it won't use both. In order for MySQL to use an index on both fields, you have to create an index on both fields. And an index on two fields can also be used as an index on the only first field listed in the index, but not as an index on only the second field listed.
But I suspect that if you change the query to use a left join as Tim suggested, you will find that it will be much faster already, and you probably won't need the extra indexes.