Si time() te devuelve la hora y los conviertes a md5() no creo que haya problemas ... aunque haya una pequeña probabilidad de que exactamente grabes una imagen en el mismo tiempo que otra ahi si tu imagen reemplazara a la que tiene el mismo nombre.... arriesgado no?
Y porke no haces el nombre del archivo con el ID del producto o usuario y concatenado con el numero de archivos que tiene ese usuario, esos elementos son unicos e irrepetibles