If upon looking up an entry I find another value in that slot (bound to happen) I'd check the next slot (which our CPU has probably prefetched already) until we reach a slot which has never held a value. I'd have the type field distinguish always-was empty vs "tombstoned" slots.
To set a value in the record under a given key, I'd locate the slot for that key or the first empty slot after where it should be.
As for handling strings...
4/5!