text: Title: Use Annotated to Indexed to complete type hints
  Body: ### Discussed in https://github.com/roman-right/beanie/discussions/637
  
  <div type='discussions-op-text'>
  
  <sup>Originally posted by **hudrazine** August  4, 2023</sup>
  If you define `Indexed` as a type hint for a field, the type checker will complain :
  ```python
  class Task(Document):
      title: Indexed(str)  # I get complaints from pylance
  
      class Settings:
          name = "inbox_tasks"
  ```
  This is due to the use of a direct call expression in the type.
  Also, the type checker cannot parse this as a specific type (in this case, str), so the type hint is not reflected in the IDE either.
  
  This way, they won't complain :
  ```python
  IndexedTitle = Indexed(str)  # Define outside
  
  class Task(Document):
      title: IndexedTitle  # pylance also smiles
      ...
  ```
  But the IDE does not reflect the correct type hints; above all, this is not smart.
  
  So, use [typing.Annotated](https://docs.python.org/ja/3/library/typing.html#typing.Annotated) :
  ```python
  class Task(Document):
      title: Annotated[str, Indexed(str)]
      # or like this
      title: Annotated[str, Indexed()]
      title: Annotated[str, Indexed(index_type=pymongo.TEXT)]
      ...
  ```
  In this way, metadata of indexing can be added to the field while providing type hints.
  In the current `beanie`(1.21.0), the type hint works, but it is not marked as Indexed.
  
  I think this method is well proven and has been incorporated in Pydantic and FastAPI, do you think it would be beneficial for `beanie`?</div>