I don't think that this can be achieved from a terminal, but in GUI mode you could try this:

    (define-key input-decode-map [?\C-i] [C-i])
    (global-set-key (kbd "<C-i>") 'indent-region)

I do the same thing with `C-m` so that it can be distinguished from `RET`

**EDIT:**

The following should work whether you are in GUI or TTY mode:

    ;; Unbind <C-i> from the TAB key and bind it to indent-region.
    ;; Since TAB and <C-i> cannot be differentiated in TTY emacs,
    ;; the workaround is to conditionally bind TAB to indent-region
    ;; when there is an active region selected.
    (if (window-system)
      ; IF we are not in a TTY, unbind C-i from TAB
        (progn
          (define-key input-decode-map [?\C-i] [C-i])
          ; ... and remap it to indent-region
          (global-set-key (kbd "<C-i>") 'indent-region))
      ; ELSE IF we are in a TTY, create a replacement for TAB
      (defun my/tab-replacement (&optional START END)
        (interactive "r")
        (if (use-region-p)
          ; IF active region, use indent-region
            (indent-region START END)
          ; ELSE IF no active region, use default tab command
          (indent-for-tab-command)))
      ; Bind our quick-and-dirty TAB replacement to the TAB key
      (global-set-key (kbd "TAB") 'my/tab-replacement))

It is not pretty, but it seems to do the job.  I welcome any refinements or edits to this code as necessary.