find can filter for multiple conditions like file name - you combine logical statements with -a for "and" and -o for "or". You can also use ! for not, but name sure you quote it or escape it because the shell treats this as a special character.
Using grep as you did, you might exclude some files which you actually want, although your file naming convention might prevent that. e.g. the file name "me.jpg.movie.mp4". You could always use a $ to anchor the pattern to the end of the file name, but you can also do it in the find, like this (one less process = efficient happiness):
find . \! -name '*.jpg' -a \! -name '*.db' -a -mtime -90
...which means, "list files with the name does not match the glob pattern '*.jpg' and the glob pattern does not match '*.db' and the modification time is less than 90 days.
You can then pipe this into a little shell loop and do what you want with it. You might have file names with spaces in, so don't forget to quote your variables.
find . \! -name '*.jpg' -a \! -name '*.db' -a -mtime -90 | while read f; do
echo "processing file: $f"
ln -s "$f" "..." # however you want the link command to be.