(define-modify-macro orf (&rest args) or)
Another possibility is to modify the place only if it's null. This definition is more involved:
(defmacro orf (place &rest forms &environment environment)
(multiple-value-bind (temps vals news writer reader) (get-setf-expansion place environment)
(let* ((new-form `(or ,@forms)) (set-form `(multiple-value-bind ,news ,new-form ,writer)))
`(let* (,.(mapcar #'list temps vals)) (or ,reader ,set-form)))))
There's also an atomic version of orf, using SBCL's get-cas-expansion.
macro example