:word creates a symbol in the keyword package; it will remain during the life of your program. #:word creates a symbol in no package; it will presumably be garbage collected after use.
In both cases, symbol-name is used to create a new symbol (by name). The benefit of using these instead of "word" is that they undergo the default case translation whereas a string literal does not.
Thus there is a minor memory benefit to using #:word.