ThisThis question on stackoverflow has two suggestions, including using elisp to set the header-line-format to the first line of the table.
It also suggests splitting the window horizontally and keeping the header in the upper window as a hackish workaround.
To use the code, add it to org-mode-hook as follows
(add-hook 'org-mode-hook (lambda() (setq-local header-line-format (list '(:eval (save-excursion (org-table-goto-line 1) (substring (thing-at-point 'line t) 0 -1)))))))