I just noticed a mistake in my original code (i used $1 in the $hfind instead of $2)

and no your code wont work here is what should do the job.

Code:
alias -l hash.table {
  var %hash.table = HASHTABLENAME
  if (!$hget(%hash.table)) {
    hmake %hash.table
    if ($isfile(%hash.table)) {
      hload -n %hash.table %hash.table
    }
  }
  return %hash.table
}
;
on *:TEXT:!update & & & *:{
  if ($hfind($hash.table,$+($2,$chr(9),*),1,w).data) { var %item = $v1 }
  else { var %item = $+($ctime,$ticks,$rand(1000000,1999999)) }
  hadd $hash.table %item $+($2,$chr(9),$3,$chr(9),$4,$chr(9),$5)
  hsave -no $hash.table $hash.table
}
on *:text:@info &:*: {
  if ($hfind($hash.table,$+($2,$chr(9),*),1,w).data) { var %item = $v1 | msg $chan $nick : $+ $hget($hash.table,%item) }
  else { msg $chan $nick : $2 Not present }
}

* code untested *

Note when using this never refrence HASHTABLENAME directly always use $hash.table, as this creates if needed the table and also loads it from the save file if needed.