since mysql and postgresql both have spatial indexing, I'd go for geometry fields with a spatial index on it.
But as the DB will save it in a binary format, you'll have to do some other magic to get the text versions in your result after querying.
Something like this:
protected $geometry = ['coordinates'];
protected $geometryAsText = true;
public function newQuery($excludeDeleted = true)
{
if (!empty($this->geometry) && $this->geometryAsText === true)
{
$raw = '';
foreach ($this->geometry as $column)
{
$raw .= 'AsText(`' . $this->table . '`.`' . $column . '`) as `' . $column . '`, ';
}
$raw = substr($raw, 0, -2);
return parent::newQuery($excludeDeleted)->addSelect('*', DB::raw($raw));
}