I would question whether it makes sense to hash UTF-16LE ("Unicode") this way. It might make a lot more sense to convert your VB String to UTF-8 and then hash that.
While I can't find any test vectors for djb2 to validate my own implementation it seems to run quite quickly:
Private Type CURRENCY_CURRENCY
Value As Currency
End Type
Private Type CURRENCY_2LONGS
ValueLo As Long
ValueHi As Long
End Type
Public Function djb2(ByVal StringToHash As String) As Long
Dim C2L As CURRENCY_2LONGS
Dim CC As CURRENCY_CURRENCY
Dim I As Long
C2L.ValueLo = 5381
For I = 1 To Len(StringToHash)
LSet CC = C2L
CC.Value = CC.Value * 33@ + CCur(AscW(Mid$(StringToHash, I, 1))) / 10000@
LSet C2L = CC
C2L.ValueHi = 0
Next I
djb2 = C2L.ValueLo
End Function