1) ma no che c'entra php
2) la cache non ha senso sulle immagini, la cache di rails usala per il codice da eseguire
3) ti assicuro che avendo le immagini su file system ti semplifichi parecchio la vita, personalmente metterei il timestamp o similare nel nome del file così da avere nomi univoci e caricherei tutto nella stessa cartella... al massimo puoi pensare di avere una cartella per utente ma dipende da quante immagini avrai per utente
per immagini intendo comunque qualsiasi file uploadato... il discorso non cambia
4) volendo controllare se il file è già stato caricato ( evento relativamente frequente ) farei un hash sul contenuto del file e lo metterei nel db come campo unico